Rails + 设计:如果不满足约束,则停止登录过程
Rails + Devise: Halt login process if constraints not met
所以我试图限制登录过程,这样当用户使用错误的 IP 地址登录时,不会创建会话,我会显示 af flash 解释发生了什么。
我的大部分逻辑都有效,但问题是,如果条件以 else 子句结尾,无论如何都会创建会话。
class Employees::SessionsController < Devise::SessionsController
before_action :validate_ip, only: [:create]
layout 'devise'
def validate_ip
# Pseudo code
if ENV['ip] == remote_ip
create
else
flash[:alert] = "Ip does not match"
end
end
end
我没有太多的设计经验,所以我不知道正确的方法。
但是这段代码(以及之前的尝试)工作正常,除了无论如何,会话都会继续创建。
您需要在 validate_ip
过滤器中进行重定向或呈现:如果您只是 return 来自过滤器,devise
将继续正常执行,因此用户将已登录。
你的 else
分支上的 redirect_to root_url, alert: "Ip does not match"
应该可以工作。
所以我试图限制登录过程,这样当用户使用错误的 IP 地址登录时,不会创建会话,我会显示 af flash 解释发生了什么。
我的大部分逻辑都有效,但问题是,如果条件以 else 子句结尾,无论如何都会创建会话。
class Employees::SessionsController < Devise::SessionsController
before_action :validate_ip, only: [:create]
layout 'devise'
def validate_ip
# Pseudo code
if ENV['ip] == remote_ip
create
else
flash[:alert] = "Ip does not match"
end
end
end
我没有太多的设计经验,所以我不知道正确的方法。
但是这段代码(以及之前的尝试)工作正常,除了无论如何,会话都会继续创建。
您需要在 validate_ip
过滤器中进行重定向或呈现:如果您只是 return 来自过滤器,devise
将继续正常执行,因此用户将已登录。
你的 else
分支上的 redirect_to root_url, alert: "Ip does not match"
应该可以工作。