在OAuth2受保护的视图中检索用户信息

时间:2015-10-05 20:33:03

标签: django oauth

我正在使用django-oauth-toolkit进行应用的OAuth2实施。我有以下代码:

request.user

问题是返回的用户名和ID是空的。似乎无法检索用户对象,就像匿名用户调用该函数一样,这是不正确的,因为OAuth2需要用户身份验证。

也许是因为它是用户授权进行呼叫的客户端应用,而不是用户本身?如果是这样,我如何获得与应用程序对应的用户对象?感谢。

编辑:

我尝试将Anonymous user is not JSON serializable置于响应但失败,错误为Git。所以django确实认为该请求来自匿名用户。

2 个答案:

答案 0 :(得分:2)

使用标题中的访问令牌来检索相应的用户。这里的授权'就像:' Bearer {token}'。

from oauth2_provider.models import AccessToken

def user_info(request):
    app_tk = request.META["HTTP_AUTHORIZATION"]
    m = re.search('(Bearer)(\s)(.*)', app_tk)
    app_tk = m.group(3)
    acc_tk = AccessToken.objects.get(token=app_tk)
    user = acc_tk.user

    username = user.username
    u_id     = user.id
    # other codes and return

答案 1 :(得分:2)

这是一个后来者,但如果有人后来遇到这个问题,实际答案是关于Django配置。

按照此页面上的说明操作:https://django-oauth-toolkit.readthedocs.io/en/latest/tutorial/tutorial_03.html

如果您拥有正确的AUTHENTICATION_BACKENDS和MIDDLEWARE_CLASSES,则会在基于令牌的身份验证之后填充request.user。