我正在为现有的 Pyramid 项目添加身份验证。我目前正在尝试的最简单的形式(稍后会扩展)是让所有页面都引发 HTTPForbidden。异常 View 是/login,它将询问登录详细信息,并在成功时返回以 request.referer 作为位置的 HTTPFound。
到目前为止一切顺利,这实现了我想要的效果,即在登录页面中断时将用户带回到他们试图访问的页面。我们称此页面为 A。
登录页面是一个带有提交按钮的简单 HTML 表单。
但是,如果用户输入错误的用户名或密码,我想返回到登录页面,并显示一条错误消息“密码错误”或类似内容。发生这种情况时,request.referer 现在是登录页面而不是页面 A。
我如何“存储”页面 A(或者更确切地说是它的 URL),以便当用户最终成功登录时,他们会发现自己回到了页面 A? session 是否用于这样的事情,是否有非 session 的实现方式?我(还)没有针对这个简单页面的 session ,并且我试图避免一次添加不同的组件。
最佳答案
我建议你传递一个参数,比如 login/?next=pageA.html
如果登录失败,您可以将参数 next
再次转发到 /login
,即使 referrer 现在指向 /login
.
然后,当用户成功登录时,您可以将 if 重定向到 pageA.html
,它将保存在您的 next
参数中。
您确实需要检查您的参数 next
是否有效,因为有人可以复制粘贴或尝试篡改此参数。
关于python - 如何在登录失败后保持 request.referer 值不被重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38453730/