为了账号安全,请及时绑定邮箱和手机立即绑定

如何防止用户在已经登录时访问 django 中的登录页面?

如何防止用户在已经登录时访问 django 中的登录页面?

慕田峪4524236 2021-11-30 15:35:34
在我的 django 应用程序中,用户即使在登录后也可以通过 URL 访问登录/注册页面。如何防止他们访问这些页面?urls.pyfrom django.urls import pathfrom django.contrib.auth import views as auth_viewsfrom . import viewsapp_name = 'account'urlpatterns = [  path('signup/', views.register, name='register'),  path('', auth_views.LoginView.as_view(), name='login'),]虽然我可以在views.py 中编写if-else 语句来检查经过身份验证的用户,但我没有在 views.py 中使用任何登录功能。我正在使用 django 的默认登录系统和一个authentication.py页面进行自定义登录(使用电子邮件地址进行身份验证)。authentication.pyfrom django.contrib.auth.models import Userclass 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请建议我一种有效的方法,当他们尝试通过在浏览器上输入其 URL 来访问登录或注册页面时,将已通过身份验证的用户重定向到主页。
查看完整描述

2 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

您可以通过修改 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'),

]

这将从登录页面重定向已通过身份验证的用户。对于注册,您必须自定义您的注册功能,添加一个 if 用户是否经过身份验证检查。


查看完整回答
反对 回复 2021-11-30
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

你也可以使用这个装饰器。


def login_excluded(redirect_to):

    """ This decorator kicks authenticated users out of a view """ 

    def _method_wrapper(view_method):

        def _arguments_wrapper(request, *args, **kwargs):

            if request.user.is_authenticated:

                return redirect(redirect_to) 

            return view_method(request, *args, **kwargs)

        return _arguments_wrapper

    return _method_wrapper

然后在您的 views.py 中调用它。


@login_excluded('app:redirect_to_view')

def someview(request):

    # ...


查看完整回答
反对 回复 2021-11-30
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信