2013-07-14 30 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