我最近更新了一个应用并推送到heroku,其中一个更新的功能是将我的会话ID从用户ID更改为安全十六进制。一旦推送,我注意到以前的用户无法再登录。我检查了heroku控制台,发现他们的身份验证令牌设置为nil,这是我猜的。我的问题是:
有没有办法在更新之前为用户设置身份验证令牌? 我可以编写某种循环来在更新之前为用户创建此令牌,以防止再次发生这种情况吗?
或者我必须擦除数据库并让用户再次注册。
欢呼声。
答案 0 :(得分:2)
来自Remember Me & Reset Password评论部分的解决方案。
尝试使用您的开发数据库
我前一段时间尝试过,如果 generate_token 是方法名称, auth_token 是您存储的数据库字段,它会为所有用户更新身份验证令牌一个令牌。如果您只是需要为目前没有令牌的用户更改它,您可以使用if语句内部任务进行思考。
在 lib / tasks / rebuild_token_auth.rake中创建文件:
namespace :user do
desc "Rebuild Auth-Tokens"
task :rebuild_auth_token => :environment do
User.transaction do
User.all.each { |u|
u.generate_token(:auth_token)
u.save!
}
end
end
end
这样称呼:
rake user:rebuild_auth_token
在他的例子中,generate_token看起来像这样:
class User < ActiveRecord::Base
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
end