Redirect to Next after login in Django

前端 未结 5 3076
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-02-09 08:09

When a user accesses a url which requires login. The view decorator redirects to the login page. after the user enters his username and password how can I redirect the user to t

5条回答
  •  暖寄归人
    2021-02-09 08:38

    The accepted answer does check for the next parameter redirecting to an external site. For many applications that would be a security issue. Django has that functionality inbuilt in form of the django.utils.http.is_safe_url function. It can be used like this:

    from django.shortcuts import redirect
    from django.utils.http import is_safe_url
    from django.conf import settings
    
    def redirect_after_login(request):
        nxt = request.GET.get("next", None)
        if nxt is None:
            return redirect(settings.LOGIN_REDIRECT_URL)
        elif not is_safe_url(
                url=nxt,
                allowed_hosts={request.get_host()},
                require_https=request.is_secure()):
            return redirect(settings.LOGIN_REDIRECT_URL)
        else:
            return redirect(nxt)
    
    def my_login_view(request):
        # TODO: Check if its ok to login.
        # Then either safely redirect og go to default startpage.
        return redirect_after_login(request)
    

提交回复
热议问题