由於Doorkeeper是一個獨立的引擎,因此我們無法訪問您在ApplicationController
中所做的任何操作。但是如果你需要一個current_user呢?什麼可能是一個解決方法在這裏?訪問Gatekeeper中的current_user覆蓋版面
第一個想法是猴子補丁ActionController::Base
。有更好的想法嗎?
由於Doorkeeper是一個獨立的引擎,因此我們無法訪問您在ApplicationController
中所做的任何操作。但是如果你需要一個current_user呢?什麼可能是一個解決方法在這裏?訪問Gatekeeper中的current_user覆蓋版面
第一個想法是猴子補丁ActionController::Base
。有更好的想法嗎?
除非沒有答案,否則可能是我自己的骯髒的猴子補丁會對別人有用。
在初始化/ 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
我認爲你可以找到這個頁面上。
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
我看門執行是基本的應用程序的內部,這不會幫助,如果你使用的是單獨的引擎,但會,如果你使用相同的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