0

コンシューマーのcomplete()メソッドを呼び出すと、「[openididentifier]を検出した後に一致するエンドポイントが見つかりません」というエラーが発生します。

面白いことに、私がテストした4つのOpenIDプロバイダーのうち、この動作はLiveJournalでのみ観察されます。問題を調査して修正するために、どのような手順を提案できますか?

store = FileOpenIDStore("/path/to/store")

def login(req, uri):
    req.content_type = "text/html"
    session = Session.Session(req)
    consumer = Consumer(session, store)
    auth = consumer.begin(uri)
    util.redirect(req, auth.redirectURL("http://example.com", "http://example.com/authtest.py?sid=" + session.id()))
    return

def index(req, sid):
    req.content_type = "text/html"
    c = Consumer(Session.Session(req, sid), store)
    args = req.args.split("&")
    arg_dict = {}
    for i in range(0, len(args)):
        x, y = args[i].split("=")
        arg_dict[x] = unquote(y)
    v = c.complete(arg_dict, "http://example.com/authtest.py?" + req.args)
    if v.status == 'failure':
        return v.message
    else:
        return v.status
4

1 に答える 1

1

コードに明白なエラーは表示されませんが、調査する手順は次のとおりです。

  • からの出力はありますoidutil.logか?デフォルトではstderrにログを記録しますが、Webサーバーでstderrが表示されない場合は、オーバーライドして別の場所にログを記録できます。

  • すべてのリクエスト/レスポンスをキャプチャします。TamperDataのようなものを使用 して、ブラウザーを介して渡される間接的な要求/応答を取得し、それをcontrib/openid-parsepython-openidディストリビューションからフィードして、より読みやすくすることができます。

  • python-openidソースディストリビューションのサンプルコンシューマーはLJ識別子で機能しますか?もしそうなら、例とあなたのコードの間の要求/応答の違いは何ですか?

  • LJ識別子に句読点が含まれていますか?

  • テスト対象のOpenIDバージョン1.xプロバイダーはLJだけですか?(おそらく。残りが多すぎないことを願っています。)

  • あなたの引数の構文解析はを使用することができますurlparse.parse_qsが、それが本当に問題であるかどうかはわかりません。(そして、parse_qsは{key:[list-of-values]}を返しますが、Consumer.complete{key:single-value}を期待するので、一方を他方にマップする必要があります。)

于 2010-03-04T21:45:37.850 に答える