Django - allauth - 防止未经身份验证的用户查看针对经过身份验证的用户的页面

aba*_*rik 1 django django-allauth

我试图使用Django与allauth尝试创建一个登录页面.

我能够成功登录并将用户重定向到LOGIN_REDIRECT_URL(="users/{id}/mypage")页面.我有/ users/{id}/mypage的单独视图,名为views.py中定义的UserHomePageView:

from django.views.generic import TemplateView

class UserHomePageView(TemplateView):
    template_name = "user_homepage.html"
Run Code Online (Sandbox Code Playgroud)

我想要一个安全措施来阻止任何人(基本上是非登录用户)导航到"/ users/{id}/mypage"(例如/ users/5/mypage).ei如果未经身份验证的用户尝试导航到/ users/5/mypage,他/她应该被重定向到登录页面/主页.

基本上,我如何呈现未经身份验证的用户来查看针对经过身份验证的用户的页面(我不想使用模板标签users.authenitcated,但希望覆盖TemplateView)

knb*_*nbk 5

通常使用的另一种解决方案是使用装饰器修饰dispatch方法login_required:

from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required

class UserHomePageView(TemplateView):
    template_name = "user_homepage.html"

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(UserHomePageView, self).dispatch(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

这样做的好处是它适用于所有方法(get,post,put等),并且使用login_required装饰器比显式检查request.user.is_authenticated和重定向更干.