1

GoogleCode2011-May-03からダウンロードしたopenid-selector-1.3.zipにあるopenidセレクターのプロトタイプバージョンをdjango-openid-authで使用しようとしています。

javascriptコードでデモモードをオフにしました。

この組み合わせは、launchpad.net openidで機能しますが、GoogleやYahooでは機能しません。

GoogleまたはYahooをクリックしても、何も起こりません。グーグルまたはヤフーのボタンは沈んだようにレンダリングされます。それでおしまい。また、django devserverは、GoogleまたはYahooボタンをクリックしたときにフォームPOSTを表示しません。

AOLを押すと、テキストフィールドと送信ボタンがフォームに追加されます。ただし、GoogleまたはYahooを押すと、これは発生しません...追加のフィールドとサインイン/送信ボタンはありません。

javascriptエラー、または要素の名前付けまたはIDの問題が疑われます。以前にこれを行ったことがある人が、下のテンプレートでフォームがどのように設定されているかを見て、問題をすぐに確認できることを願っています。

テストされたブラウザは、Firefox 3.6.16(linux)とgoogle chrome(linux)でした。それらは同等に機能しているように見えます。どちらもlaunchpadopenidにログインしますが、googleまたはyahooがクリックされたときに識別子ボタンをシンクする以外に何もしません。

これがdjangodevWebサーバーのログで、すべての静的部分が読み込まれていることを示しています。これらは、code.google.comのopenid-selectorディストリビューションから、わずかな変更をいくつか加えてコピーされています(デモをオフにし、イメージディレクトリを設定します)。これは、適切なピースが配信されていることを示すためです(もちろん、これらはキャッシュされる可能性があるため、不在が決定的なものになることはありません...)

[03/May/2011 04:58:53] "GET / HTTP/1.1" 200 115
[03/May/2011 04:58:56] "GET /openid/login HTTP/1.1" 301 0
[03/May/2011 04:58:56] "GET /openid/login/ HTTP/1.1" 200 2182
[03/May/2011 04:58:56] "GET /static/css/openid.css HTTP/1.1" 200 1007
[03/May/2011 04:58:56] "GET /static/js/prototype.js HTTP/1.1" 200 162353
[03/May/2011 04:58:56] "GET /static/js/openid-prototype.js HTTP/1.1" 200 5931
[03/May/2011 04:58:56] "GET /static/js/openid-en.js HTTP/1.1" 200 2302
[03/May/2011 04:58:56] "GET /static/images/openid-providers-en.png HTTP/1.1" 200 15894

django-openid-authは、例としてテキスト入力/送信ボタンフォームのみを提供します。ただし、login.htmlテンプレートをサポートしているため、project / templates / openid / login.htmlに、レンダリング中のこのテンプレートがあります。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>Please Login</title>
        <!-- Simple OpenID Selector -->
        <link type="text/css" rel="stylesheet" href="/static/css/openid.css" />
        <script type="text/javascript" src="/static/js/prototype.js"></script>
        <script type="text/javascript" src="/static/js/openid-prototype.js"></script>
        <script type="text/javascript" src="/static/js/openid-en.js"></script>
        <script type="text/javascript">
                document.observe('dom:loaded', function() {
                        openid.init('openid_identifier');
                });
        </script>
        <!-- /Simple OpenID Selector -->
        <style type="text/css">
                /* Basic page formatting */
                body {
                        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
                }
        </style>
</head>

<body>
        <h2>Please Select Your Provider for Login</h2>
        <p>Select your identity provider from the list below. You will be sent there to log in and returned here as an identified user. There are no registration forms for this website or extra passwords to remember. </p>
{% if form.errors %}
<p class="errors">Please correct errors below:<br />
    {% if form.openid_identifier.errors %}
    <span class="error">{{ form.openid_identifier.errors|join:", " }}</span>
    {% endif %}
    {% if form.next.errors %}
    <span class="error">{{ form.next.errors|join:", " }}</span>
    {% endif %}
</p>
{% endif %}
        <br/>
        <!-- Simple OpenID Selector -->
        <form action="{{ action }}" name="fopenid" method="post" id="openid_form">
          {% csrf_token %}
                <input type="hidden" name="action" value="verify" />
                <fieldset>
                        <legend>Sign-in or Create New Account</legend>
                        <div id="openid_choice">
                                <p>Please click your account provider:</p>
                                <div id="openid_btns"></div>
                        </div>
                        <div id="openid_input_area">
                                <input id="openid_identifier" name="openid_identifier" type="text" maxlength="255" value="http://" />
                                <input id="openid_submit" type="submit" name="bsignin" value="Sign-In" />
                        </div>
                        <noscript>
                        <p>You need javascript and cookies enabled and an OpenID to use this site.  You are using a browser that does not support javascript or has javascript turned off.</p>
                        </noscript>
                </fieldset>
       </form>
        <!-- /Simple OpenID Selector -->
</body>
</html>

問題が何であるかについて何か考えはありますか?フォーム要素の命名が含まれる可能性があると思いましたが、元のIDを維持していると思いました。テキストフィールドのフォーム名を変更しました。

これは解決された問題のようです。そうすれば、django用にカスタマイズされたバージョンのopenid-selectorを簡単にダウンロードできます。しかし、私はそれを見つけることができませんでした。この統合を行うためのより良い方法はありますか?

4

1 に答える 1

0

openid-prototype.js での Google/Yahoo ボタンの非アクティブの問題は、次のようにフォーム送信処理を少し変更することで修正できました。

ステップ 1: init() で、openid-prototype.js の 47 行目付近を変更します。

$('openid_form').submit=this.submit

$('openid_form').onsubmit=this.submit

[STEP 1 の以前の設定は、シングル ステップで奇妙な動作を引き起こしているようでした。ただし、関数 this.submit === openid.submit は、クリックする送信ボタンがある場合にのみ呼び出されるようになりました。ボタンを追加せずに元のインターフェイスを維持するために、単純なエンドポイントのサインイン手順を変更して、STEP 2 で両方の関数を呼び出す]

ステップ 2: signin() で、openid-prototype.js の 95 行目あたりを変更します。

if (!onload) {$('openid_form').submit();}

if (!onload) {if (this.submit()){$('openid_form').submit();}}}

これら2つの変更を加えた後、機能しました。Google または Yahoo をクリックすると、openid フォームが django-openid-auth のフォーム処理ビューに POST されます。

于 2011-05-04T05:13:43.850 に答える