1

我有一个可能很容易解决的问题,但激烈的谷歌搜索并没有帮助我。问题如下:我有一个带有身份验证系统的 Rails 应用程序。系统的工作方式是有一个管理员用户可以创建其他用户。问题是,我刚刚重置了我的操作系统,现在一切都需要重新连接,包括这个管理员用户。以前,你可以通过应用程序来完成,但这不再需要了。所以现在,您需要使用 sqlite3 手动创建管理员用户。所以我需要做类似的事情:

sqlite3 db/development.sqlite3 "INSERT INTO users VALUES(1,'admin-name','admin-email','admin-password','admin-password',1,1,1,1)"

但这显然不起作用,因为“管理员密码”没有加密。尝试登录应用程序然后给我

BCrypt::Errors::InvalidHash in SessionsController#create

正如预期的那样。

如何插入加密密码,以便以管理员身份登录应用程序?

感谢您的帮助 :-) 谢谢您和最诚挚的问候!

4

2 回答 2

2

我会做以下两件事之一:

  1. 创建一个使用 User 模型创建管理员用户的 rake 任务
  2. 拥有一个创建管理员用户的数据库种子文件,再次使用您的 User 类来处理密码加密。

您选择哪一个取决于您打算如何使用它。如果需要创建管理员用户(我希望不是)很常见,那么 rake 任务更有意义。如果您只需要清除数据库并使用可用的管理员重新创建它,那么 db 种子就是要走的路。

我会避免使用原始 SQL 方法的原因是它太容易搞砸了,而且您可能在数据库中有敏感数据,您不希望任何进行更改的人访问这些数据。像这样的自动化流程可以在未来节省大量的精力。

于 2013-10-28T15:20:21.057 回答
0

这是它如何工作的示例

#small script that automatically creates an admin user
puts 'creating admin user...'
namespace :db do
  namespace :admin_setup do
    task :admin => :environment do
      admin = User.create(
        :name => "admin", 
        :email => "admin", 
        :password => "admin", 
        :password_confirmation => "admin"
      )
    end
  end
end

将其放入名为 something.rake 的文件中,放入文件夹 path/to/application/lib/tasks 并通过以下方式运行它

rake db:admin_setup:admin
于 2013-10-28T17:28:48.150 回答