在 django Rest Framework 中获取当前登录用户
Posted
技术标签:
【中文标题】在 django Rest Framework 中获取当前登录用户【英文标题】:Get current Logged in User in django Rest Framework 【发布时间】:2022-01-17 05:04:23 【问题描述】:我正在尝试获取当前登录的用户并将信息上传/发送到前端。 我是 Rest Framework 的新手,所以请原谅我的基本级别问题。
我曾尝试在我的视图中使用request.user
和request.auth
获取用户,但我无法简单地获取用户。
这是我的意见。py
from rest_framework.authtoken.models import Token
def get_User (request):
# current_user = request.user
# context = "user": current_user
# print(request.user.username)
user_id = Token.objects.get(key=request.auth.key).user_id
print(request.auth)
# Response(context)
我正在使用自定义用户模型来存储数据。
每次我运行 request.auth
或 request.user
时,我都可以在我的 django 终端中看到它一直转到 /verify-auth-token/ URL。
如何让用户打印也发送到 React 中的前端以在应用程序中显示。任何帮助表示赞赏。
编辑 1:我只从上述视图传递用户。
from rest_framework.authtoken.models import Token
user_id = Token.objects.get(key=request.auth.key).user_id
user = Users.object.get(id =user_id)
Response (user)
这就是我认为我应该将变量传递给前端的方式,但我没有以这种方式实现任何目标。
【问题讨论】:
【参考方案1】:首先确保您已将 SessionMiddleware 和 AuthenticationMiddleware 中间件添加到您的 MIDDLEWARE_CLASSES 设置中。
当前用户在请求对象中,可以通过以下方式获取:
def sample_view(请求): current_user = request.user 打印(当前用户)
request.user 会给你一个代表当前登录用户的用户对象。如果用户当前未登录,request.user 将被设置为 AnonymousUser 的实例。您可以使用字段 is_authenticated 来区分它们,如下所示:
如果 request.user.is_authenticated: # 为经过身份验证的用户做一些事情。 别的: # 为匿名用户做点什么。
希望它有效!
谢谢!!
【讨论】:
谢谢。我可以使用request.user
来获取用户,但我不能通过它来像request.user
那样做出反应,无论如何我可以在不编写序列化程序的情况下将此数据传递给前端。感谢您的回复。
仅当您使用带有模板或简单 http 页面的会话时才有效,在 React 和 DRF 中您不使用会话而是令牌身份验证
@SahilMohile 您需要传递令牌对象来验证用户,向我们展示您尝试传递请求用户的视图
@GaëtanGR 我已经更新了问题。请检查
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:
如果您正在使用 DRF 并且想要将信息传递到您的前端,则不能使用 request.user,因为 request 正在使用会话。
要识别用户,您需要将令牌与用户相关联,然后将关联对象用户传递到您的前端,反之亦然,这是一个简单的示例:
def get_user_by_token(token):
user_id = Token.objects.get(key=request.auth.key).user_id
user = Users.object.get(id =user_id)
return JsonResponse("user": user.id)
因此,一旦用户与令牌相关联,您就可以将所需的任何内容以 JSON 格式返回到前端
【讨论】:
当我定义请求功能时,您尚未在示例中定义请求。它需要论证。如何获取令牌密钥进行验证。感谢您提供对问题的见解 您在哪里工作?你在使用 DRF 和 Django 的 React 吗? 是的,我正在使用 DRF。我没有使用 React-django 模板。我的两个应用程序都独立于 API 和前端。我的意思是在上面的例子中你写的答案有request.auth.user
这不起作用,因为没有调用请求。以上是关于在 django Rest Framework 中获取当前登录用户的主要内容,如果未能解决你的问题,请参考以下文章