我试图给使用设计的应用程序添加一个新的登录条件。我重定向到sign_in后设计重定向到
如果请求来自不在我白名单上的IP,我想阻止登录并重定向回到sign_in页面,并用闪光消息解释登录来自外部IP。
重定向的工作原理,但我设置的flash消息并没有返回到sign_in页面。我认为这是因为Devise神秘地在重定向链中添加了另一个重定向(这将会中止Flash消息,因为Flash消息仅适用于一个请求)。
这是我在做什么:我检查请求的IP是否在我的白名单。如果不是,我重定向到/users/sign_in
并设置flash通知以显示用户无法登录的原因。
这是我迷路 ...重定向后/users/sign_in
发生时,用户神秘地被转到/
这反过来又重定向到/users/sign_in
。
上一次重定向回到sign_in页面是我们为用户未登录而自定义的页面。但重定向回到根URL会让我失望。我没有重写sessions_controller中的new
动作(这是发生这种神秘重定向的地方......),所以这是所有Devise逻辑,据我所知。
有没有人猜测发生了什么,有没有一个设计配置会导致重定向,还是有另一种方式我应该处理这件事?
在我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
你试过把你的重定向逻辑作为'before_filter'吗? – thesis
我刚刚做了,我没有发现任何区别 – jordanstephens