2013-07-14 28 views
4

由于Doorkeeper是一个独立的引擎,因此我们无法访问您在ApplicationController中所做的任何操作。但是如果你需要一个current_user呢?什么可能是一个解决方法在这里?访问Gatekeeper中的current_user覆盖版面

第一个想法是猴子补丁ActionController::Base。有更好的想法吗?

回答

0

除非没有答案,否则可能是我自己的肮脏的猴子补丁会对别人有用。

在初始化/ action_controller_patch.rb:

module ActionController 
    Base.class_eval do 

    def current_user 
     @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 
    helper_method :current_user 

    end 
end 
0

我认为你可以找到这个页面上。

https://github.com/applicake/doorkeeper/wiki/Using-Resource-Owner-Password-Credentials-flow

我使用证书身份验证模式,所以在我的情况下,这个工作。

Doorkeeper.configure do 
    resource_owner_from_credentials do |routes| 
    request.params[:user] = {:email => request.params[:username], :password => request.params[:password]} 
    request.env["devise.allow_params_authentication"] = true 
    request.env["warden"].authenticate!(:scope => :user) 
    end 
end 
2

我看门执行是基本的应用程序的内部,这不会帮助,如果你使用的是单独的引擎,但会,如果你使用相同的Rails应用程序,所以我将分享在这里:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    private 

    def current_user 
    if doorkeeper_token 
     return current_resource_owner 
    end 
    # fallback to auth with warden if no doorkeeper token 
    warden.authenticate(:scope => :user) 
    end 

    # Needed for doorkeeper find the user that owns the access token 
    def current_resource_owner 
    User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token 
    end  

end