在 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.userrequest.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.authrequest.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 中获取当前登录用户的主要内容,如果未能解决你的问题,请参考以下文章

django使用rest_framework

Django Rest Framework

Django rest framework 身份和权限验证

Django Rest Framework:非模型服务

django-rest-framework - 在可浏览的 API 中自动生成表单?

在 django-rest-framework 中,是不是可以同时使用 oauth 和 session 身份验证?