Deviseを使用するアプリに新しいログイン条件を追加しようとしています。
ホワイトリストにない IP からリクエストが送信された場合、ログインを防止し、サインイン ページにリダイレクトして、外部 IP からのログインであることを説明するフラッシュ メッセージを表示したいと考えています。
リダイレクトは機能しますが、設定したフラッシュ メッセージがサインイン ページに戻りません。これは、Devise が不思議なことにリダイレクト チェーンに別のリダイレクトを追加しているためだと思います (フラッシュ メッセージは 1 つの要求にしか有効でないため、フラッシュ メッセージが強制終了されます)。
私がやっていることは次のとおりです。リクエストのIPがホワイトリストにあるかどうかを確認します。そうでない場合は、リダイレクトし/users/sign_in
てフラッシュ通知を設定し、ユーザーがログインできない理由を表示します。
ここで迷子になります... へのリダイレクトが/users/sign_in
発生した後、ユーザーは不思議なことに にリダイレクトされ/
、さらに にリダイレクトされ/users/sign_in
ます。
sign_in ページに戻る最後のリダイレクトは、ユーザーがログインしていない場合に備えて独自に定義したものです。しかし、ルート URL に戻るリダイレクトは私をつまずかせます。私は session_controller のアクションをオーバーライドしていませんnew
(この不思議なリダイレクトが発生する場所です...)。
誰かが何が起こっているのか推測していますか、そのリダイレクトを引き起こすデバイス構成がありますか、またはこの全体にアプローチする別の方法はありますか?
私のsessions_controllerで
class SessionsController < Devise::SessionsController
def create
unless ip_whitelist.include?(request.remote_ip)
redirect_to '/users/sign_in', :notice => "Cannot log in from this IP address."
return
end
...
end
end