gpt4 book ai didi

ruby-on-rails - 在 Rails 中创建帐户时创建随机、唯一的 token

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:31 24 4
gpt4 key购买 nike

我有一个使用 Devise(最新的)的 Rails 4 应用程序,我正在尝试为每个用户创建一个随机 token (如 ID,但更长,等等)使用 this回答我能够想出以下代码:

# app/models/model_name.rb
class ModelName < ActiveRecord::Base
include Tokenable
end

# app/models/concerns/tokenable.rb
module Tokenable
extend ActiveSupport::Concern

included do
before_create :generate_token
end

protected

def generate_token
self.token = loop do
random_token = SecureRandom.urlsafe_base64(nil, false)
break random_token unless self.class.exists?(token: random_token)
end
end
end

此代码对于任何给定模型的唯一 token 非常有效。 IE。所有用户都将拥有唯一的 token ,所有管理员都将拥有唯一的 token 。但是管理员可能拥有与用户相同的 token ——这种行为是不受欢迎的。

有没有一种优雅的方法,除了将 token 抽象到它自己的模型中并使用“has_one”关系来确保 token 不存在于它所属的所有模型中?

(我想我可以将 unless (User.exists? ... or Admin.exists? ... ) 硬编码到 unless 子句中,尽管这看起来很笨重。)

如有任何想法或建议,我们将不胜感激!谢谢!

最佳答案

Rails 5 带来了一个新特性 has_secure_token 非常容易使用:

# Schema: User(token:string, auth_token:string)
class User < ActiveRecord::Base
has_secure_token :auth_token
end

user = User.new
user.save
user.auth_token # => "pX27zsMN2ViQKta1bGfLmVJE"
user.regenerate_auth_token # => true

由于 Rails 5 尚未发布,您可以使用 Backport has_secure_token gem

关于ruby-on-rails - 在 Rails 中创建帐户时创建随机、唯一的 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27335681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com