我正在尝试向使用 Devise 的应用程序添加新的登录条件。
如果请求来自不在我的白名单上的 IP,我想阻止登录并重定向回 sign_in 页面,并显示一条闪烁消息,说明登录来自外部 IP。
重定向有效,但我设置的 Flash 消息不会使其返回登录页面。我认为这是因为 Devise 在重定向链中神秘地添加了另一个重定向(这会杀死 flash 消息,因为 flash 消息只对一个请求有用)。
这就是我正在做的事情:我检查请求 ip 是否在我的白名单中。如果不是,我会重定向到/users/sign_in
并设置 Flash 通知以显示用户无法登录的原因。
这就是我迷路的地方......重定向到/users/sign_in
发生后,用户神秘地被重定向到/
,然后又重定向回/users/sign_in
.
如果用户未登录,最后一个重定向回登录页面是我们自己定义的。但是重定向回根 URL 让我感到困惑。我没有覆盖 session_controller 中的new
动作(这是发生这个神秘重定向的地方......),所以据我所知,这就是所有设计逻辑。
有没有人猜测发生了什么,是否存在会导致重定向的设计配置,或者是否有另一种方法我应该处理这整个事情?
在我的 session_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