0

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 の専門家が教えてくれますか。

4

1 に答える 1

0

答え

openid-selectorをフォルダーにインストールし、readmeごとにgenerate-sprite.jsを編集します。次に、そのフォルダーのコマンドラインからwscriptgenerate-sprite.exeを実行します。新しいopenid-provider-en.pngが生成されます。それを画像フォルダにコピーすると、MyOpenIDセレクタボックスにMyOpenIdアイコンが表示され、MyOpenIdログインに接続されます。

WScriptが未定義であることも参照してください

于 2012-04-30T06:16:19.687 に答える