SQLite:手动插入加密密码

时间:2013-10-28 14:59:50

标签: ruby-on-rails sqlite bcrypt

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

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

但这显然不起作用,因为“admin-password”未加密。尝试登录应用程序然后给我

BCrypt::Errors::InvalidHash in SessionsController#create

正如所料。

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

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

2 个答案:

答案 0 :(得分:1)

我会做两件事之一:

  1. 创建使用用户模型
  2. 创建管理员用户的rake任务
  3. 拥有一个创建admin用户的数据库种子文件,再次使用您的User类来处理密码加密。
  4. 您选择哪一个取决于您打算如何使用它。如果需要创建管理员用户(我希望不是),则rake任务更有意义。如果您只需要清除数据库并使用可用的管理员重新创建数据库,那么db seed就是您要走的路径。

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

答案 1 :(得分: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的文件到文件夹路径/到/ application / lib / tasks中并通过

运行
rake db:admin_setup:admin