我正在使用django-oauth-toolkit进行应用的OAuth2实施。我有以下代码:
request.user
问题是返回的用户名和ID是空的。似乎无法检索用户对象,就像匿名用户调用该函数一样,这是不正确的,因为OAuth2需要用户身份验证。
也许是因为它是用户授权进行呼叫的客户端应用,而不是用户本身?如果是这样,我如何获得与应用程序对应的用户对象?感谢。
编辑:
我尝试将Anonymous user is not JSON serializable
置于响应但失败,错误为Git
。所以django确实认为该请求来自匿名用户。
答案 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。