我使用django-oauth-工具包实现我的应用程序的OAuth2。我有以下代码:
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确实认为这个请求来自一个匿名用户。
发布于 2015-10-05 23:04:36
使用标题中的访问令牌检索相应的用户。在这里,‘授权’类似于:‘承载{令牌}’。
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发布于 2016-08-20 01:18:52
这里是一个后来者,但是如果以后有人遇到这个问题,实际的答案是Django配置。
请按照此页面上的说明:03.html
如果您拥有正确的AUTHENTICATION_BACKENDS和MIDDLEWARE_CLASSES,则将在基于令牌的身份验证之后填充request.user。
https://stackoverflow.com/questions/32957411
复制相似问题