如何在登录失败后保持request.referer值不受重定向影响

时间:2016-07-19 08:52:46

标签: python session login form-submit pyramid

我正在为现有的金字塔项目添加身份验证。我目前正在尝试的最简单的形式(将在稍后扩展)是针对所有页面提升HTTPForbidden。异常视图是/ login,它将询问登录详细信息,并在成功时返回HTTPFound并将request.referer作为位置。

到目前为止一切都那么好,这就是我想要的,它将用户带回他们试图访问的页面,当登录页面中断它们时。我们称之为A页。

登录页面是一个带有提交按钮的简单HTML表单。

但是,如果用户输错了用户名或密码,我想返回登录页面,并显示错误消息“密码错误”或类似信息。当发生这种情况时,request.referer现在是登录页面而不是页面A.

如何'存储'页面A(或更确切地说是其URL),以便当用户最终成功登录时,他们发现自己回到了页面A?会话是用于这样的事情,是否有非会话方式来实现它?我还没有为这个简单的页面设置会话,并且我试图避免在一次通过中添加不同的组件。

1 个答案:

答案 0 :(得分:4)

我建议你传递像login/?next=pageA.html

这样的参数

如果登录失败,您可以再次将参数next转发至/login,即使推介人现在指向/login

然后,当用户成功登录时,您可以将if重定向到pageA.html参数中的next

您确实需要检查参数next是否有效,因为有人可以复制粘贴或尝试篡改此参数。