ruby-on-rails – 访问Doorkeeper覆盖布局中的current_user

由于Doorkeeper是一个独立的引擎,我们无法访问您在ApplicationController中所做的任何事情.但是如果你需要current_user怎么办?这可能是一种解决方法?

第一个想法是修补ActionController :: Base.还有更好的想法?

最佳答案 我的门卫实施是在基础应用程序内部,所以如果你使用一个单独的引擎,这将不会有帮助,但如果你使用相同的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
点赞