在Rails中跳过Authenticate方法

时间:2016-10-17 01:33:00

标签: ruby-on-rails ruby devise rails-authorization

我有一个Sessions控制器,需要使用User模型中定义的 has_secure_password 的.authenticate方法创建会话进行身份验证,如下所示:

编辑:

class User < ApplicationRecord
 before_save { self.email = email.downcase }

# Relationships
 has_secure_password
 has_many :pedidos

 # Validations
 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
 validates :nome, presence: true
 validates :empresa, presence: true
 validates :email, presence: true, length: { maximum: 255 },    
                format: { with: VALID_EMAIL_REGEX }
 validates :cpf, presence: true, length: { minimum: 11, maximum: 14 }
 validates :password, presence: true, length: { minimum: 6 }    

 def admin?
    self.admin
 end
end

SessionsController

def create
    user = User.find_by(email: params[:sessions][:email])
    if user && user.authenticate(params[:sessions][:password])
        flash[:success] = "Seja bem vindo(a), #{user.nome}!"            
        session[:user_id] = user.id
        redirect_to user
    else
        flash.now[:danger] = 'Não foi possível realizar o login, '
        flash.now[:danger] += 'combinação usuário/senha inválido'
        render 'new'
    end
end

现在我创建了一个admin / Users控制器,我想要执行数据库操作,而无需输入密码 password_confirmation 字段。在当前情况下,我收到错误消息说&#34;密码和密码_确认不能为空白&#34;

我该怎么办?谢谢。

1 个答案:

答案 0 :(得分:0)

如果您的问题是您希望能够在不需要密码的情况下将新用户保存到您的数据库,那么一种方法可能就是为管理员添加虚拟密码as explained here

将管理员保存到数据库时,另一个可能是skip validations。 (我还没有用has_secure_password尝试过这个问题,所以我并不认为它有效,但值得一试)