我正在使用带有has_secure_password的rails 4,它在users table中有password_digest。我想为cookie存储一些唯一值,password_digest对于users表中的用户是唯一的吗?如何使用它作为唯一令牌?我可以吗?
答案 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或任何地方使用它。