1

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

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

还是我只需要擦除数据库并让用户重新注册。

干杯。

4

1 回答 1

2

记住我并重置密码评论部分的解决方案。

在您的开发数据库上试用

我前段时间尝试过,如果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
于 2013-03-19T11:31:39.640 回答