[英]How to access current_user from a Doorkeeper authenticated session
我有一个rails应用程序 ,我试图与Android应用程序同步。 我使用Doorkeeper作为服务器并使用Oltu作为客户端成功设置了身份验证 。
我的应用程序跟踪按用户列表存在的习惯。 习惯控制器中的索引方法是:
def index
@habits = current_user.habits
end
当通过Devise进行身份验证时,此方法有效,当使用Doorkeeper时, current_user
为nil
。
我会覆盖你的基本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.