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" 应该可以工作。