【问题标题】:Skip Authenticate method in Rails在 Rails 中跳过身份验证方法
【发布时间】:2016-10-17 01:33:00
【问题描述】:

我有一个 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

会话控制器

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

现在我创建了一个管理员/用户控制器,我想执行数据库操作而无需输入 passwordpassword_confirmation 字段。在当前情况下,我收到错误消息说“密码和密码确认不能为空”

我应该如何进行?谢谢。

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow。您提到您的用户方法使用 has_secure_passwod 并说“如下所示”,但您包含的示例代码不包含您的 User 模型 - 只是控制器。您能否编辑您的问题并添加用户模型的代码?这将帮助我们查明您的错误。
  • 请点击以下链接。 stackoverflow.com/questions/10442466/… 标题##
  • 请也为您的用户模型发布代码
  • 谢谢大家,我已经添加了User模型的代码,很抱歉。

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


【解决方案1】:

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

另一个可能是skip validations 将管理员保存到数据库时。 (我没有用has_secure_password 尝试过这个,所以我不确定它会起作用,但值得一试)

【讨论】:

  • 谢谢,.save(validate: false) 可能会解决我在管理控制器中的问题,尽管我必须非常谨慎地使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 2018-06-29
相关资源
最近更新 更多