自定义Login视图中next参数失效,跳转至预设页面问题求助
解决Django自定义Login视图中next参数不生效的问题
你当前的问题是重写get_success_url方法时,完全跳过了Django默认处理next参数的逻辑,导致不管URL里有没有合法的next参数,都会直接跳转到你指定的页面。
要修复这个问题,只需要在get_success_url里先检查next参数是否存在且合法,优先使用它,再 fallback 到你原来的角色判断逻辑:
from django.utils.http import is_safe_url from django.urls import reverse class Login(auth_views.LoginView): def get_success_url(self): # 先获取next参数 next_url = self.request.GET.get('next') # 验证next是否是安全的跳转地址(避免恶意跳转) if next_url and is_safe_url(next_url, allowed_hosts=self.request.get_host()): return next_url # 没有合法next的情况下,再按用户角色跳转 if self.request.user.is_superuser: return reverse('dashboard') else: return reverse('homepage')
关键逻辑说明:
- 从请求的GET参数中提取
next值 - 用
is_safe_url验证地址合法性,防止跨站钓鱼跳转 - 优先使用合法的
next地址,否则执行原有的角色跳转规则
内容的提问来源于stack exchange,提问作者riccardo test
相关产品推荐
相关产品推荐

