0

OAuth2認証にoauth2appライブラリを使用しているDjangoWebサイトがあります。また、非推奨のuni_formの代わりにcrispy_formsを使用するようにoauth2appを変更しました。

oauth2appのauthorize()メソッドは、Djangoデコレーター@login_requiredによって保護されています。実際、クライアントが最初にログインせずに認証しようとすると、ログインページが表示されます。

予想どおり、デコレータにより、ログインページのURLには、承認リクエストの元のURLを含む「次の」CGIパラメータが含まれます。

問題は、ログインページのテンプレートがインスタンス化されたときに「next」パラメータが伝播されないことです。私が欲しいのは、フォーム「action」に「next」パラメーターを含めることです。

このページは、解決策を提供することを目的としています。

http://django-uni-form.readthedocs.org/en/latest/helpers.html

「ビューでのヘルパーの操作」のセクションにあります。

その例に従って、私は試しました:

form = LoginForm()
redirect_url = request.GET.get('next')
if redirect_url is not None:
    form.helper.form_action = reverse(login) + '?next=' + 
      redirect_url

ただし、結果のページのソースには、フォームの元の「アクション」が表示されます。form_actionへの割り当ては有効になっていないようです。実際、テンプレートをインスタンス化せずにform_actionを返すだけの場合、変更されていません。

return HttpResponse('action: ' + form.helper.form_action)

私を困惑させてください。

4

1 に答える 1

0

uni_forms の作成者は、ここで私を手がかりにしました。

問題は、フォーム ヘルパーがプロパティであるため、form_action がそのプロパティの固定部分であったことです。

プロパティをヘルパーを作成するメソッドに変更することで、form_action を動的に変更できます。

すべてが機能するようになりました。Javascript のハックは必要ありません。

于 2012-09-05T19:00:38.387 に答える