Akh*_*mar 13 python django django-login
在我的 Django 应用程序中,用户即使在登录后也可以通过 URL 访问登录/注册页面。如何防止他们访问这些页面?
网址.py
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
app_name = 'account'
urlpatterns = [
path('signup/', views.register, name='register'),
path('', auth_views.LoginView.as_view(), name='login'),
]
Run Code Online (Sandbox Code Playgroud)
虽然我可以在views.py 中编写if-else 语句来检查经过身份验证的用户,但我没有在 views.py 中使用任何登录功能。我正在使用 django 的默认登录系统和一个authentication.py页面进行自定义登录(使用电子邮件地址进行身份验证)。
认证文件
from django.contrib.auth.models import User
class EmailAuthBackend(object):
"""
Authenticate using an e-mail address.
"""
def authenticate(self, request, username=None, password=None):
try:
user = User.objects.get(email=username)
if user.check_password(password):
return user
return None
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
Run Code Online (Sandbox Code Playgroud)
请建议我一种有效的方法,当他们尝试通过在浏览器上输入其 URL 来访问登录或注册页面时,将已通过身份验证的用户重定向到主页。
Was*_*asi 17
您可以通过修改 urls.py 文件来重定向用户,如下所示:
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
app_name = 'account'
urlpatterns = [
path('signup/', views.register, name='register'),
path('', auth_views.LoginView.as_view(redirect_authenticated_user=True), name='login'),
]
Run Code Online (Sandbox Code Playgroud)
这将从登录页面重定向已通过身份验证的用户。对于注册,您必须自定义您的注册功能,添加一个 if 用户是否经过身份验证检查。
| 归档时间: |
|
| 查看次数: |
4766 次 |
| 最近记录: |