password_digest值对用户来说是唯一的吗?

时间:2015-11-19 08:38:03

标签: ruby-on-rails

我正在使用带有has_secure_password的rails 4,它在users table中有password_digest。我想为cookie存储一些唯一值,password_digest对于users表中的用户是唯一的吗?如何使用它作为唯一令牌?我可以吗?

1 个答案:

答案 0 :(得分:1)

正如@JonathonReinhart所说,不要重复使用password_digest,并且由于会话中的authenticity_token for CSRF更改了所提交的每个表单,因此您也不能在此处使用它。如果您只需要为User模型生成唯一令牌,我建议您执行以下操作:

rails generate migration AddAccessTokenToUser access_token:string:uniq:index

然后你可以在创建时使用类似的回调生成令牌:

class User < ActiveRecord::Base

  # Call backs
  # ----------
  before_create :generate_access_token

  private

    def generate_access_token
      begin
        self.access_token = SecureRandom.hex
      end while self.class.exists?(access_token: access_token)
    end

end

begin-end-while 将检查表中的SecureRandom.hex值是否始终唯一。

获得此令牌后,您可以在cookie或任何地方使用它。