MVC3アプリケーションでOpenIDを設定し、Gmailログインを使用しています。以下の私の認証フォームを参照してください。私はhttp://weblogs.asp.net/haithamkhedre/archive/2011/03/13/openid-authentication-with-asp-net-mvc3-dotnetopenauth-and-openid-selector.aspxでコードを実装しています
IIS Expressを使用してローカルで実行すると、すべてが正常に機能し、elseステートメントとbuttonGreenコードが表示されます。Webにデプロイすると、「if(String.IsNullOrEmpty(Model.UserName))」でトリップし、「New User、Register」コードになります。model.OpenIDが表示されます。コードはMyOpenId(他の問題のために放棄しました)でオンラインで動作します。
メンバーシップデータベースはメインデータベースに組み込まれ、ユーザーはOpenIDログインを介してローカルで作成され、ロールに割り当てられてから、データベースがWebにプッシュされます。2週間前の時点で最新のDotANetOpenAuthを使用しています。DotANetOpenAuth.Core、DotANetOpenAuth.OpenId、DotANetOpenAuth.OpenId.RelyPartyを使用しています。
<form action="Authenticate?ReturnUrl=@HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"])" method="post" id="openid_form">
<input type="hidden" name="action" value="verify" />
<div>
<fieldset>
<legend>Login using OpenID</legend>
<div class="openid_choice">
<p> Please click your account provider:</p>
<div id="openid_btns"></div>
</div>
<div id="openid_input_area">
@Html.TextBox("openid_identifier")
<input type="submit" value="Log On" />
</div>
<noscript>
<p>
OpenID is service that allows you to log-on to many different websites using a single
indentity. Find out <a href="http://openid.net/what/">more about OpenID</a> and
<a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
</noscript>
<div>
@if (Model != null)
{
if (String.IsNullOrEmpty(Model.UserName))
{
<div class="editor-label">
@Html.LabelFor(model => model.OpenID)
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.OpenID)
</div>
<p class="button">
@Html.ActionLink("New User, Register", "Register", new { OpenID = Model.OpenID })
</p>
}
else
{
//user exist
<p class="buttonGreen">
<a href="@Url.Action("Index", "TalPro")">Welcome @Model.UserName, Continue... </a>
</p>
}
}
</div>
</fieldset>
</div>
</form>
これがjavascriptです:openid-jquery.js
/*
Simple OpenID Plugin
http://code.google.com/p/openid-selector/
This code is licensed under the New BSD License.
*/
var providers;
var openid;
(function ($) {
openid = {
version : '1.3', // version constant
demo : false,
demo_text : null,
cookie_expires : 6 * 30, // 6 months.
cookie_name : 'openid_provider',
cookie_path : '/',
img_path : '../Content/themes/base/images/',
locale : 'en', // is set in openid-<locale>.js
sprite : 'en', // usually equals to locale, is set in
// openid-<locale>.js
signin_text : 'Sign-In', // text on submit button on the form
all_small : false, // output large providers w/ small icons
no_sprite : false, // don't use sprite image
image_title : '{provider}', // for image title
input_id : null,
provider_url : null,
provider_id : null,
/**
* Class constructor
*
* @return {Void}
*/
init : function(input_id) {
providers = $.extend({}, providers_large);
var openid_btns = $('#openid_btns');
this.input_id = input_id;
$('#openid_choice').show();
$('#openid_input_area').empty();
var i = 0;
// add box for each provider
for (id in providers_large) {
box = this.getBoxHTML(id, providers_large[id], (this.all_small ? 'small' : 'large'), i++);
openid_btns.append(box);
}
$('#openid_form').submit(this.submit);
var box_id = this.readCookie();
if (box_id) {
this.signin(box_id, true);
}
},
/**
* @return {String}
*/
getBoxHTML : function(box_id, provider, box_size, index) {
if (this.no_sprite) {
var image_ext = box_size == 'small' ? '.ico.gif' : '.gif';
return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"'
+ ' style="background: #FFF url(' + this.img_path + '../images.' + box_size + '/' + box_id + image_ext + ') no-repeat center center" '
+ 'class="' + box_id + ' openid_' + box_size + '_btn"></a>';
}
var x = box_size == 'small' ? -index * 24 : -index * 100;
var y = box_size == 'small' ? -60 : 0;
return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"'
+ ' style="background: #FFF url(' + this.img_path + 'openid-providers-' + this.sprite + '.png); background-position: ' + x + 'px ' + y + 'px" '
+ 'class="' + box_id + ' openid_' + box_size + '_btn"></a>';
},
/**
* Provider image click
*
* @return {Void}
*/
signin : function(box_id, onload) {
var provider = providers[box_id];
if (!provider) {
return;
}
this.highlight(box_id);
this.setCookie(box_id);
this.provider_id = box_id;
this.provider_url = provider['url'];
// prompt user for input?
if (provider['label']) {
this.useInputBox(provider);
} else {
$('#openid_input_area').empty();
if (!onload) {
$('#openid_form').submit();
}
}
},
/**
* Sign-in button click
*
* @return {Boolean}
*/
submit : function() {
var url = openid.provider_url;
if (url) {
url = url.replace('{username}', $('#openid_username').val());
openid.setOpenIdUrl(url);
}
if (openid.demo) {
alert(openid.demo_text + "\r\n" + document.getElementById(openid.input_id).value);
return false;
}
if (url.indexOf("javascript:") == 0) {
url = url.substr("javascript:".length);
eval(url);
return false;
}
return true;
},
/**
* @return {Void}
*/
setOpenIdUrl : function(url) {
var hidden = document.getElementById(this.input_id);
if (hidden != null) {
hidden.value = url;
} else {
$('#openid_form').append('<input type="hidden" id="' + this.input_id + '" name="' + this.input_id + '" value="' + url + '"/>');
}
},
/**
* @return {Void}
*/
highlight : function(box_id) {
// remove previous highlight.
var highlight = $('#openid_highlight');
if (highlight) {
highlight.replaceWith($('#openid_highlight a')[0]);
}
// add new highlight.
$('.' + box_id).wrap('<div id="openid_highlight"></div>');
},
setCookie : function(value) {
var date = new Date();
date.setTime(date.getTime() + (this.cookie_expires * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
document.cookie = this.cookie_name + "=" + value + expires + "; path=" + this.cookie_path;
},
readCookie : function() {
var nameEQ = this.cookie_name + "=";
var ca = document.cookie.split(';');
for ( var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ')
c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0)
return c.substring(nameEQ.length, c.length);
}
return null;
},
/**
* @return {Void}
*/
useInputBox : function(provider) {
var input_area = $('#openid_input_area');
var html = '';
var id = 'openid_username';
var value = '';
var label = provider['label'];
var style = '';
if (label) {
html = '<p>' + label + '</p>';
}
if (provider['name'] == 'OpenID') {
id = this.input_id;
value = 'http://';
style = 'background: #FFF url(' + this.img_path + 'openid-inputicon.gif) no-repeat scroll 0 50%; padding-left:18px;';
}
html += '<input id="' + id + '" type="text" style="' + style + '" name="' + id + '" value="' + value + '" />'
+ '<input id="openid_submit" type="submit" value="' + this.signin_text + '"/>';
input_area.empty();
input_area.append(html);
$('#' + id).focus();
},
setDemoMode : function(demoMode) {
this.demo = demoMode;
}
};
})(jQuery);
ローカルでは機能するのに、Webでは失敗するのはなぜですか?
ありがとうございました。
質問をさらに洗練するため。IIS Express Model.UserNameを使用してローカルでホストしている場合、正しく設定され、ログインが成功します。Webでホストされている場合(DiscountASP IIS 7.0)Model.UserNameが設定されず、ログインが失敗します。問題はなぜですか?これはIISと関係がありますか?クッキーと関係がありますか?どうすれば修正できますか?