4

由于 Doorkeeper 是一个孤立的引擎,我们无法访问您在ApplicationController. 但是如果你需要一个 current_user 怎么办?这里有什么解决方法?

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

4

3 回答 3

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
于 2014-02-26T01:51:09.393 回答
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
于 2013-07-15T08:56:04.037 回答
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
于 2013-08-25T06:46:25.513 回答