1

对于我目前正在进行的项目,我决定编写一个自定义身份验证模型。我正在使用其余框架和所有访问权限。本地身份验证尚未实现(它是,但在不同的版本中,所以没有问题)。

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

使用视图时,如果我使用 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 实例的原因。

4

1 回答 1

4

你需要DEFAULT_AUTHENTICATION_CLASSES在你的settings.py. 否则 DRF 将默认为Noneasrequest.authAnonymousUserasrequest.user

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

一旦设置好并且用户登录,请确保session_id在请求标头中可用。浏览器通常存储会话信息并将其传递到所有请求的标头中。

如果您使用的是非浏览器客户端(例如移动应用程序),则需要在标题中手动设置会话 ID。

此外,由于您提到您用于oauth登录用户,因此oauth2您需要指定 oauth2 授权标头而不是会话 ID。

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

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

于 2013-04-28T05:26:32.740 回答