我正在尝试向使用Devise的应用添加新的登录条件。
如果请求来自不在我的白名单中的IP,我想阻止登录并重定向回sign_in页面,并显示一条flash消息,说明该登录来自外部IP。
重定向有效,但我设置的Flash消息不会返回到sign_in页面。我认为这是因为Devise神秘地在重定向链中添加了另一个重定向(这会消除flash消息,因为flash消息只适用于一个请求)。
这就是我正在做的事情:我检查请求ip是否在我的白名单中。如果不是,我会重定向到/users/sign_in
并设置闪存通知以显示用户无法登录的原因。
这是我迷路的地方 ...重定向到/users/sign_in
后,用户神秘地被重定向到/
,后者又重定向回{{1} }}
最后一次重定向回sign_in页面是我们为用户未登录而定义的那个。但重定向回根URL会让我感到沮丧。我没有覆盖sessions_controller中的/users/sign_in
动作(这是发生这种神秘重定向的地方......),所以这就是我所知道的所有Devise逻辑。
有没有人猜测发生了什么,是否存在导致重定向的设备配置,或者我是否应该采用另一种方式处理这一切?
在我的sessions_controller中
new
答案 0 :(得分:1)
根据Devise wiki,您可以通过向用户模型添加active_for_authentication
方法为用户添加额外的“验证”。否则,devise_for
路由方法确实接受:constraints
选项,就像常规的Rails路由约束一样。