手动设置身份验证令牌?

时间:2013-03-19 03:51:34

标签: ruby-on-rails ruby heroku token

我最近更新了一个应用并推送到heroku,其中一个更新的功能是将我的会话ID从用户ID更改为安全十六进制。一旦推送,我注意到以前的用户无法再登录。我检查了heroku控制台,发现他们的身份验证令牌设置为nil,这是我猜的。我的问题是:

有没有办法在更新之前为用户设置身份验证令牌? 我可以编写某种循环来在更新之前为用户创建此令牌,以防止再次发生这种情况吗?

或者我必须擦除数据库并让用户再次注册。

欢呼声。

1 个答案:

答案 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