根据设备的用户角色设置不同的自定义提供程序oauth作用域

时间:2014-07-24 22:16:38

标签: ruby-on-rails devise oauth-2.0 doorkeeper

我正在提供API users with an OmniAuth strategy according to the doorkeeper docs。允许客户端应用程序的某些用户在APi上写入/编辑权限。 doorkeeper wiki on using scopes表示如果您的客户端应用程序正在请求授权URI,则执行以下操作:

http://provider.example.com/oauth/authorize?(... other params... )&scope=public+write

其中public,write是范围(例如,用于公共访问和写访问)。

似乎这样做的方法是在OmniauthCallbacksController的下面的安装方法中

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def provider
    # You need to implement the method below in your model (e.g. app/models/user.rb)
    ##Some code
  end

  def setup

    render :text => "Setup complete.", :status => 404
  end
end

在setup方法中,request.env看起来像这样,它正确传递了scope参数(注意:我通过命令行调试器在下面添加了“scope”参数)

 #   request.env['omniauth.strategy'].options
    # => {"setup"=>true,
    #  "skip_info"=>false,
    #  "client_id"=>
    #   "***",
    #  "client_secret"=>
    #   "***",
    #  "client_options"=>
    #   {"site"=>"http://localhost:3000/", "authorize_url"=>"/oauth/authorize"},
    #  "authorize_params"=>{},
    #  "authorize_options"=>[:scope],
    #  "token_params"=>{},
    #  "token_options"=>[],
    #  "auth_token_params"=>{},
    #  "provider_ignores_state"=>false,
    #  "name"=>:datafeed,
    #  "scope"=>:write}

但我想能够做到这样的事情:

request.env['omniauth.strategy']['scope']=:write if current_user.role=="admin"

但是此时Devise还没有定义current_user(我在任何地方都没有看到用户ID)...有关如何在授权过程中的某个时刻找出用户的任何想法,所以我可以传递正确的范围到API?

0 个答案:

没有答案