0

Webアプリに認証を追加しようとしています。ユーザーは、次の場所に移動して認証プロセスを開始します。

/authorization/v1/new?client_id=X&response_type=Y&redirect_uri=Z

request.user存在しない場合は、次のコードを使用してリダイレクトします。

try:
    user_identity = Identity.objects.get(user=request.user)
except:
    resource = '%s?next=/authorization/v1/new' % settings.LOGIN_URL
    return HttpResponseRedirect(resource)

これにより、ユーザーはに移動し/login/?next=/authorization/v1/newます。

ユーザーは正常にログインし、にリダイレクトされ/authorization/v1/newます。

ただし、必要なGETパラメーター、、、およびが欠落しているclient_idためresponse_typeredirect_uri承認エンドポイントは、必要なパラメーターが欠落している場合にエラーをスローします。

最初のGETパラメータをキャプチャし、それらをパススルーしてログインし、認証エンドポイントに戻るリダイレクトにアタッチするための最良の方法は何ですか?

redirect_uriセッションを使用するか、他のパラメーターをアタッチするようにを変更することを考えましたが、このプロセスを通じて単一のパラメーターをキャプチャする方法を理解する必要があります。可能であれば、ログインコードを変更する必要はありません。どんなアイデア/提案も大歓迎です。ありがとう!

4

1 に答える 1

2

Djangoの組み込み@login_requiredデコレータを使用している場合は、r2954の時点でこれが処理されると思います。

そうでない場合は、同じ手順を複製する必要があります。次のように、( Djangoのように)nextフルパスの値に設定するだけです。@login_required

from urllib import quote

...
    try:
        user_identity = Identity.objects.get(user=request.user)
    except Identity.DoesNotExist:   
        return HttpResponseRedirect('%snext=%s' % (settings.LOGIN_URL, quote(request.get_full_path()))

注意:ポケモンの例外処理を回避するためにコードも変更しました(「すべてをキャッチする必要があります!」)。

于 2012-08-09T16:20:23.213 に答える