我正在提供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?