nKn*_*nKn 4 authentication django
我写了一个 Django 应用程序,它有一个外部身份验证系统,可以在某个 URL 上访问(比如,https://.../myproject/login)。这运行良好。
但是,当会话过期时,用户会被重定向到默认登录 url,即https://.../myproject/admin)。我想更改应用程序的行为,因此如果会话过期,则应将用户重定向到https://.../myproject/login并仅/admin在显式打开时使用登录名。
在 Django 中是否有内置的方法来做到这一点?
当会话过期或会话丢失时,Django admin 将用户重定向到 /admin/login。
有多种方法可以将用户重定向到https://.../myproject/login而不是https://.../myproject/admin/login。
使用 myproject/login 的视图覆盖 myproject/admin/login URL 的视图。
假设 myproject/login 使用 LoginView 渲染外部系统的登录页面,然后在 myproject/myproject/urls.py 中url(r'^admin/login/?$', LoginView.as_view(), name='admin:login')添加url(r'^admin/', include(admin.site.urls))
urlpatterns = [
url(r'^admin/login/?$', LoginView.as_view(), name='admin:login'),
url(r'^admin/', include(admin.site.urls)),
]
Run Code Online (Sandbox Code Playgroud)
优点:
缺点:
覆盖 myproject/admin/login url 的视图并将用户重定向到 myproject/login
让我们创建一个新视图AdminLoginView,然后在 url(r'^admin/', include(admin.site) 上方添加 url(r'^admin/login/?$', AdminLoginView.as_view(), name='admin:login') .urls)) 在 myproject/myproject/urls.py
from django.core.urlresolvers import reverse
class AdminLoginView(TemplateView):
def get(self, request, *args, **kwargs):
"""
Assuming the name of the external system's login url is "login"
"""
return HttpResponseRedirect(reverse('login'))
Run Code Online (Sandbox Code Playgroud)
urlpatterns = [
url(r'^admin/login/?$', AdminLoginView.as_view(), name='admin:login'),
url(r'^admin/default-login/?$', admin.site.login, name='default-admin-login'),
url(r'^admin/', include(admin.site.urls)),
]
Run Code Online (Sandbox Code Playgroud)
优点:
缺点:
我建议使用方法2来解决问题中提到的问题。
谢谢。
您可以使用LOGIN_URL和LOGOUT_REDIRECT_URL
https://docs.djangoproject.com/en/2.2/ref/settings/#login-url
重定向到myproject/login登录(默认重定向到 /accounts/login/)
LOGIN_URL = '/myproject/login/'
Run Code Online (Sandbox Code Playgroud)
注销后重定向到登录页面(默认为无)。
LOGOUT_REDIRECT_URL = '/myproject/login/'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |