繁体   English   中英

如何从Doorkeeper经过身份验证的会话中访问current_user

[英]How to access current_user from a Doorkeeper authenticated session

我有一个rails应用程序 ,我试图与Android应用程序同步。 我使用Doorkeeper作为服务器并使用Oltu作为客户端成功设置了身份验证

我的应用程序跟踪按用户列表存在的习惯。 习惯控制器中的索引方法是:

def index
  @habits = current_user.habits
end

当通过Devise进行身份验证时,此方法有效,当使用Doorkeeper时, current_usernil

我会覆盖你的基本API控制器中的current_user,如:

private

def current_user
  @current_user ||= User.find(doorkeeper_token[:resource_owner_id])
end

来自门卫的自述文件 ......

已验证的资源所有者

如果要基于当前资源所有者(即访问令牌所有者)返回数据,您可能需要在控制器中定义一个返回资源所有者实例的方法:

class Api::V1::CredentialsController < Api::V1::ApiController
  before_action :doorkeeper_authorize!
  respond_to    :json

  # GET /me.json
  def me
    respond_with current_resource_owner
  end

  private

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

在此示例中,我们将返回访问令牌所有者的凭据( me.json )。

我有一个API,需要允许通过Doorkeeper或Devise进行身份验证。 以下解决方案允许主应用程序使用Oauth客户端将使用的相同端点并共享current_user方法。

before_action :doorkeeper_authorize!, unless: :user_signed_in?

def current_user
  @current_user ||= if doorkeeper_token
                      User.find(doorkeeper_token.resource_owner_id)
                    else
                      warden.authenticate(scope: :user)
                    end
end

我不知道这是否是正确的方法,但解决方案是:

def index
  user = current_user
  user ||= User.find(doorkeeper_token[:resource_owner_id]) if doorkeeper_token
  @habits = user.habits
end

您无法分配给current_user也不会将其设置为nil

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM