首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OAuth2受保护视图中检索用户信息

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

Stack Overflow用户
提问于 2015-10-05 20:33:02
回答 2查看 1.8K关注 0票数 1

我使用django-oauth-工具包实现我的应用程序的OAuth2。我有以下代码:

代码语言:javascript
复制
    from oauth2_provider.decorators import protected_resource
    User = get_user_model()

    @protected_resource(scopes=['ifttt'])
    @api_view(['GET'])
    def user_info(request):
        username = request.user.username
        u_id     = request.user.id
        data = {}
        data['name'] = username
        data['id'] = u_id

        rst = {}
        rst['data'] = data
        return Response(rst, status=status.HTTP_200_OK)

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

也许是因为用户授权的客户端应用程序,而不是用户本身?如果是这样,如何使用户对象与应用程序相对应?谢谢。

编辑:

我试图让request.user响应,但失败了,错误是Anonymous user is not JSON serializable。django确实认为这个请求来自一个匿名用户。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-05 23:04:36

使用标题中的访问令牌检索相应的用户。在这里,‘授权’类似于:‘承载{令牌}’。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2016-08-20 01:18:52

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

请按照此页面上的说明:03.html

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32957411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档