您好我正在尝试生成Token来验证rails Api客户端。我在模式类中使用了generate_key_method
。
class ApiKey < ActiveRecord::Base
before_create :generate_access_token
validates :access_token, uniqueness: true
def generate_access_token
begin
self.access_token = SecureRandom.hex
end while self.class.exists?(access_token: access_token)
end
end
答案 0 :(得分:1)
before_create
次回调。在您的情况下,唯一性验证失败并在可以触发before_create
回调之前暂停回调链。您可以在create:
before_validation :generate_access_token, on: :create
有关详细信息和整个订购,请参阅active record callbacks上的页面。
答案 1 :(得分:0)
您需要查看this回答。
实现目标的正确方法是使用以下内容:
#app/models/api_key.rb
class ApiKey < ActiveRecord::Base
before_create :generate_key
protected
def generate_key
self.access_token = loop do
random_token = SecureRandom.hex
break random_token unless ApiKey.exists?(access_token: random_token) #-> this acts in place of the validation
end
end
end
-
以上内容现已弃用,赞成ActiveRecord's Secure Token functionality:
#app/models/api_key.rb
class ApiKey < ActiveRecord::Base
has_secure_token :access_token
end
key = ApiKey.new
key.save
key.access_token # -> "pX27zsMN2ViQKta1bGfLmVJE"