Devise: manually encrypt password and store directly

前端 未结 5 938
[愿得一人]
[愿得一人] 2021-02-01 02:27

I\'m trying to migrate a ton of users from an old database. To do this, I\'m using activerecord-import and trying to save all my user data directly to DB (bypassing the User mo

5条回答
  •  [愿得一人]
    2021-02-01 02:57

    Good news and bad news.

    Good news:

    The following works to create your user's password manually.

     pepper = nil
     cost = 10
     encrypted_password = ::BCrypt::Password.create("#{password}#{pepper}", :cost => cost).to_s
    

    You can find your pepper and cost in your devise initializer. This method was confirmed using Devise's "valid_password?" method.

    Bad news:

    The entire reason I was trying to avoid "User.new(password: password).encrypted_password" was because of speed. It's terribly slow. With all my other pieces of my import task, I've intentionally avoided this.

    But as it turns out, the major cost here is not instantiating a User object -- but BCrypt itself. There is very little noticeable speed boost when using BCrypt directly because it's intentionally designed to be slow.

    My final answer: suck it up, run the rake script, go find a beverage.

提交回复
热议问题