生成令牌在rails中返回nil

时间:2016-01-21 05:14:35

标签: ruby-on-rails ruby rest ruby-on-rails-4

您好我正在尝试生成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

inserts null while creating record

2 个答案:

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