具有可变令牌到期的门卫

时间:2015-07-01 08:15:54

标签: ruby-on-rails token doorkeeper

我在我的应用上使用Doorkeeper,现在我需要将access_token_expires_in设置为变量,具体取决于用户。

此值直接存储在用户模型中,但我无法找到使用此变量创建令牌的任何方法。这是我测试的一部分(不起作用)

require 'error'

Doorkeeper.configure do

  orm :active_record

  resource_owner_from_credentials do |routes|
    request.params[:user] = {:email => request.params[:username], :password => request.params[:password]}
    request.env["devise.allow_params_authentication"] = true

    user = User.where(email: params[:username]).first
    if user.nil? #|| !user.valid_password?(params[:password])
      false
    else
      access_token_expires_in user.access_token_duration
      user
    end
  end
end

我发现这(完全正常)错误:

NoMethodError (undefined method `access_token_duration' for #<User:0x007fed1c062898>)

我可以使用我的自定义值直接更新auth_access_token,但它已经创建但有点脏。

有没有人知道另一种方法呢?

1 个答案:

答案 0 :(得分:1)

这么容易(我没有重启我的服务器)

require 'error'

Doorkeeper.configure do |c|

  orm :active_record

  resource_owner_from_credentials do |routes|
    request.params[:user] = {:email => request.params[:username], :password => request.params[:password]}
    request.env["devise.allow_params_authentication"] = true

    user = User.where(email: params[:username]).first
    if user.nil? #|| !user.valid_password?(params[:password])
      false
    else
      c.access_token_expires_in user.access_token_duration
      user
    end
  end
end