【问题标题】:Create user in Active Admin在 Active Admin 中创建用户
【发布时间】:2013-12-16 16:11:22
【问题描述】:

我正在尝试使用活动管理员创建用户。我正在从头开始进行身份验证 railscast 这样做。目前我已经使用以下命令设置了资源:

rails g resource user name:string username:string password_digest:string

那么我的用户模型是这样的:

class User < ActiveRecord::Base
  has_secure_password
  attr_accessible :name, :password, :username

  validates_uniqueness_of :name
  validates_uniqueness_of :username
end

大部分时间都在使用 railscast 逐字逐句地进行。然后,我使用以下代码添加了一个活动管理资源:

rails g active_admin:resource user

我的用户活动管理模型如下所示:

ActiveAdmin.register User do
  index do
    # column "number", :id
    column :name
    column :username
    column :password
    default_actions
  end

  show do
    attributes_table do
      row :name
      row :username
      row :password
    end
  end
end

当我去创建用户时,我收到以下错误消息:

Can't mass-assign protected attributes: password_digest

我知道 has_secure_password 和 bcrypt-ruby 会为您更改密码等。但我收到此错误。

如何在此处使用活动管理员创建有效用户?

【问题讨论】:

  • :password_digest 添加到attr_accessible 时会发生什么?
  • 当我添加 :password_digest 时,我得到一个关于 :password 的错误。如果我将 :password_digest 替换为 :password 它可以工作,但是没有 :password 用户方法
  • 我没有建议你替换:password,我建议你添加:password_digest。然后会发生什么?

标签: ruby-on-rails activeadmin authentication bcrypt-ruby


【解决方案1】:

我不确定您所指的 railscast 的详细信息,但存储密码的一种常用方法是存储加密摘要而不是实际密码,这样访问您的数据库的人就不会拥有实际的密码您的用户的密码。密码实际上并没有保存。这是一种可行的方法:

# models/user.rb

def password= new_password
  self.password_digest = ::BCrypt::Password.create(new_password,cost:10).to_s
end

这样,password_digest 是在验证之前设置的,所以它会通过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多