python - 如何使用自定义用户模型和自定义注销 View 从 Django 注销?

标签 python django django-authentication

我制作了一个应用程序并扩展了 AbstractUser 以将一些字段添加到我的 User 模型中。在那之后,一切都按预期工作(登录、创建用户、重设密码......)但是当我尝试使用默认注销时 django.contrib.auth.LogoutViewinclude('django.contrib.auth.urls') 它只会忽略注销。当我返回受限页面时,我可以进入并查看内容,我的用户实际上已登录!

我创建了一个这样的自定义注销 View

def custom_logout(request):
    print('Loggin out {}'.format(request.user))
    auth.logout(request)
    print(request.user)
    return HttpResponseRedirect('/restrictedpage')

在restrictedpage我有一个打印声明给用户看

print("User logged: {}".format(request.user))

当我点击注销时,这是控制台中显示的内容:

"GET /restrictedpage  HTTP/1.1" 200 19820
User logged: ceterre
 ----- This is where i click logout ------
Loggin out AnonymousUser
AnonymousUser
"GET /accounts/logout/ HTTP/1.1" 302 0  ----- this redirects me to /restrictedpage
User logged: ceterre
"GET /restrictedpage HTTP/1.1" 200 19820

这字面上翻译成:

 - I know ceterre is logged
 - logging out ceterre
 - user logged: AnonymousUser
 - redirect to restricted page (where I should have no access since im supposedly logged out)
 - user logged: ceterre (without any login or anything...)

最佳答案

登录和注销是 Django(和 AbstractUser 也是)的一部分,因此您不需要扩展这部分代码。您必须做的一件事是在 settings.py 文件中添加这两行代码:

LOGIN_REDIRECT_URL = 'template_name'
LOGOUT_REDIRECT_URL = 'template_name'

关于python - 如何使用自定义用户模型和自定义注销 View 从 Django 注销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55581333/

相关文章:

django - 为什么 django 需要一个数据库来自定义身份验证后端?

python - Django 2.0 : Application labels aren't unique, 重复:auth

python - gunicorn 无法启动 python-eve

python - pip 的 -t 标志是什么?

python - 使用 Python 将现有字典转换为 JSON

django - drf : custom field validation function not being called

python - 使用lxml解析XML,当有另一个子节点时无法获取文本

python - 过滤包含特定值的多个列

python - 将数据写入xls并在python-django中下载

python - DjangoForeignKey用户认证