我有以下型号:
class User < ActiveRecord::Base
has_secure_password
# ...
end
我试图根据条件跳过has_secure_password
帮助的验证。
所以,搜索后我发现in this answer方式总是跳过验证,但是当我尝试在我的情况下采用此解决方案时(正如我所说,我想跳过它)条件),如下:
class User < ActiveRecord::Base
has_secure_password validations: :super_admin?
private
def super_admin?
p "role #{role.inspect}"
role == 'super_admin'
end
end
......它没有跳过验证。它甚至不会调用super_admin?
方法。
提前致谢。
答案 0 :(得分:0)
对于您的情况,当您为用户创建会话时,您需要跳过的是user.authenticate 下面是使用logical或user.super_admin创建sesion的示例?等于true然后它将通过并且用户可以登录
class SessionsController < ApplicationController
def create
user = User.find_by_username(params[:session][:username])
if user && (user.super_admin? || user.authenticate(params[:session][:password]))
login user
flash[:success] = "Successfully login"
redirect_to users_path
else
flash.now[:error] = 'sorry cannot login'
render 'new'
end
end
end
在user.rb中,删除私人并按以下方式检查
class User < ActiveRecord::Base
def super_admin?
p "role #{role.inspect}"
role == 'super_admin'
end
end