gpt4 book ai didi

python - Django Rest-framework 不会在调用之间存储经过身份验证的用户

转载 作者:行者123 更新时间:2023-12-01 05:45:30 25 4
gpt4 key购买 nike

对于我当前正在进行的项目,我决定编写一个自定义身份验证模型。我同时使用rest-framework 和all-access。本地身份验证尚未实现(已实现,但版本不同,因此没有问题)。

用户模型正确注册并且 OAuth 身份验证有效。用户可以正常登录。

使用 View 时,如果我使用 django 的 View 作为基类,身份验证可以正常工作。如果我使用rest-framework的APIView,那就没那么多了。

在我的 ProfileView(LOGIN_REDIRECT_URL 重定向至此处)中,我收到了一个 rest_framework.request.Request 实例,这对我来说没问题。问题是:

request.user 是 AnonymousUser 的实例(即使在登录后)

我猜问题出在我的实现上,但是:

request._request.user 是经过身份验证的用户

(注意request._request是原始的django请求)

我倾向于认为这是一个休息框架错误,但也许你们中有人知道解决方法?

编辑请注意,登录是在非 APIView 类中进行的,而是在继承自 View 的类中进行的。这可能就是 User 实例未传递给 APIView 实例的原因。

最佳答案

您需要在 settings.py 中设置 DEFAULT_AUTHENTICATION_CLASSES。否则,DRF 将默认为 None 作为 request.authAnonymousUser 作为 request.user

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
)
}

设置完毕并且用户登录后,请确保请求 header 中提供 session_id。浏览器通常存储 session 信息并将其传递到所有请求的 header 中。

如果您使用非浏览器客户端(例如移动应用程序),则需要在 header 中手动设置 session ID。

此外,由于您提到您使用 oauth 登录用户,因此对于 oauth2 您需要指定 oauth2 授权 header 而不是 session ID。

"Authorization: Bearer <your-access-token>" 

请参阅 Django Rest Framework 中的身份验证

关于python - Django Rest-framework 不会在调用之间存储经过身份验证的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16259768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com