2016-07-19 16 views
2

既存のピラミッドプロジェクトに認証を追加します。私が現在試みている最も単純なフォーム(後で消費する)は、すべてのページがHTTPForbiddenを呼び出すことです。例外ビューは/ loginです。これはログインの詳細を尋ね、成功するとrequest.refererをHTTPFoundとして返します。ログイン失敗後にrequest.referer値をリダイレクトする方法

これまでのところ、これはうまくいきました。これは、ユーザーがログインページで中断したときにアクセスしようとしていたページに戻すことです。

ログインページは、送信ボタンが付いた単純なHTMLフォームです。

ユーザーがユーザー名またはパスワードを誤って入力した場合、「パスワードが間違っています」というエラーメッセージが表示されたログインページに戻りたいとします。その場合、request.refererはPageAではなくログインページになります。

ユーザーが最終的にログインに成功すると、ページA(またはそのURL)ページAに戻る?セッションはこのようなものに使われているのですか?それを実装するセッション以外の方法がありますか?私は(まだ)この単純なページのためのセッションを持っていませんし、1回のパスで異なるコンポーネントを追加することを避けようとしています。

答えて

3

私は、あなたが今も/loginにリファラポイントあれば、再び/loginにごパラメータnext前方そして、ログインに失敗した場合は、login/?next=pageA.html

のようにパラメータを渡すことができお勧めします。

ユーザーが正常にログインすると、nextパラメータに保持されるpageA.htmlにリダイレクトできます。

パラメータnextが有効であるかどうかを確認する必要があります。誰かがコピー貼り付けやこのパラメータの改ざんを試みる可能性があります。

+1

お返事ありがとうございます。私が予想していたよりずっと簡単です。私が持っている唯一の兆候は、URLでユーザーが見ることができる(例:_queryを使用してURLをコピーして貼り付けたが、不完全な場合など) –

+0

あなたの発言を含めるために回答を編集しました。私の答えがあなたに合っていれば、それを "受け入れられた"とマークさせます;) – LiGhTx117

+1

渡されたパラメータ* next *が 'is_safe_url'チェックを通過することを確認してください。さもなければjavascript:alert( 'xxx')のようなものを渡して、あなたのサイトでこの潜在的なXSS脆弱性を渡すことができます。 Djangoにインスピレーションを求めてくださいhttps://docs.djangoproject.com/en/1.9/_modules/django/utils/http/ –

関連する問題