ASP.NET MVC3 Razor プロジェクト
http://weblogs.asp.net/haithamkhedre/archive/2011/03/13/openid-authentication-with-asp-net-mvc3-dotnetopenauth-and-openid-selector.aspxを使用して OpenID を実装しようとしています。
openid-en.js スクリプトを次のように編集しました。
var providers_large = {
myopenid: {
name: 'MyOpenID',
label: 'Enter your MyOpenID username.',
url: 'http://{username}.myopenid.com/'
},
openid: {
name: 'OpenID',
label: 'Enter your OpenID.',
url: null
}
};
Google へのすべての参照を削除します。また、var providers_small セクションを削除し、open-jqeury.js でそれを参照しています。
これは私の LogOn.cshtml のフォームです
<form action="Authenticate?ReturnUrl=@HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"])" method="post" id="openid_form">
<input type="hidden" name="action" value="verify" />
<div>
<fieldset>
<legend>Agency use only</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>
問題は、私が何をしても Google が最初のプロバイダーとして表示され、多くの場合 MyOpenID プロバイダーが表示されないことです (Yahoo も表示されることがあります)。Cookie と履歴を削除しようとしました (IE から、手動で AppData\Roaming...\Cookies サブフォルダー、AppData\Local\ などに移動し、Visual Studio を再起動し、コンピューターを再起動します。MyOpenID プロバイダーのみをopenid-en.js が見つからない場所に保存されているのではないかと推測し、コンピューター全体でファイルを検索し、temp フォルダー内のファイルをすべて削除しました。
どんな助けでも大歓迎です。
さらにトラブルシューティングを行ったところ、MyOpenID のみを使用できることがわかりました。問題は、表示されるプロバイダ アイコンにあります。それらは常に順番に表示されます。Google、Yahoo、Aol の順に MyOpenID が表示されます。そのため、provider_large コード ブロックに MyOpenID しかリストされていない場合でも、選択ボックスに Google アイコンが配置されます。Google アイコンをクリックすると MyOpenId が表示されるので、これは機能しますが、明らかにユーザーにとって非常に混乱します。問題は、open-jquery.js のこのコード ブロックのどこかにあります。
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>';
},
2 番目を削除すると ---'" href="javascript:openid.signin(\"'--- 選択ブロックは空白ですが、まだ MyOpenID を指しています。選択ボックスをクリックしても何も起こらないという点で、機能が壊れます。 . 最初の openid.signin を削除しても、動作は変わりません. 機能を壊さずに適切なアイコンを表示するように、このコード ブロックを変更する方法を知っている人はいますか?
さらに掘り下げると、Opened-jquery.js が open-providers-en.png からプロバイダー イメージを抽出することがわかりました。openid-en.js providers_large を編集するときは、opend-providers-en.png を更新する必要があります。これを行うには、ImageMagick を必要とする openid select の一部である generate-sprite.js を実行します。それらの両方をインストールして、generate-sprite.js を実行すると、「Microsoft JScript ランタイム エラー: 'WScript' は未定義です」というエラーが表示されます。generate-sprite.js を実行する方法が明確ではありません。プロジェクトにスクリプトとして含めると、generate-sprite.js のコードのこのセクションで「Microsoft JScript ランタイム エラー: 'WScript' は未定義です」というエラーが発生しました。
var locale = 'en';
if (WScript.Arguments.length == 0) {
// assuming english locale
} else {
locale = WScript.Arguments(0);
}
generate-sprite.js スクリプトをどのように実行しますか?
Win7 と VS2010 Express のセットアップでこれを行う方法を、javascript の専門家が教えてくれますか。