Scala 如何";保留表格提交”;并在Play框架中进行身份验证
我正在尝试编写一个表单提交机制,如果需要用户进行身份验证,但一旦用户进行了身份验证,我希望表单能够自动提交,而无需用户再次填写值,甚至只需单击按钮 例如,典型的情况是在验证之前在博客上发表文章。通常,未登录的用户将完成帖子,单击“帖子”,然后被重定向到身份验证页面,一旦他通过身份验证,他将不需要返回并填写帖子,然后再次单击“帖子” 在游戏中实现这一点的正确方法是什么Scala 如何";保留表格提交”;并在Play框架中进行身份验证,scala,playframework,playframework-2.0,Scala,Playframework,Playframework 2.0,我正在尝试编写一个表单提交机制,如果需要用户进行身份验证,但一旦用户进行了身份验证,我希望表单能够自动提交,而无需用户再次填写值,甚至只需单击按钮 例如,典型的情况是在验证之前在博客上发表文章。通常,未登录的用户将完成帖子,单击“帖子”,然后被重定向到身份验证页面,一旦他通过身份验证,他将不需要返回并填写帖子,然后再次单击“帖子” 在游戏中实现这一点的正确方法是什么 在重定向到身份验证之前,是否应在会话中存储表单数据 也许在身份验证页面中存储对触发身份验证的操作的引用,以便执行第二次重定向 我
- 在重定向到身份验证之前,是否应在会话中存储表单数据
- 也许在身份验证页面中存储对触发身份验证的操作的引用,以便执行第二次重定向
- 我误解了你的问题!
正如biesior所说,最好是在提交表单之前强制进行身份验证
如果不能,请不要将数据放在会话中,因为它的大小有限(或者只有在数据非常小的情况下)并且已签名。。。事实上,会话cookies并不是为这个而准备的!
因此,您必须将post数据提交到服务器,使用自定义ID将其存储在缓存(或biesior所说的DB)中,并在查询(或会话cookie)中使用此ID重定向到验证器,然后在将其重定向回服务器时,您可以从ID中重新找到数据并完成帖子。在会话中存储临时帖子不是个好主意,会话存储在Cookie中,因此大小有限。最有可能的情况是,您需要将其存储到DB(使用一些标志,例如,
unauthicated:true
),并在会话中只存储临时帖子的id,最终存储一些唯一的令牌。所以在身份验证之后,您可以从会话中获取这些值,并使用重定向,从而允许在登录后进一步编辑和最终发布
在这种情况下,我还建议使用一些调度程序,它将在几个小时/天之后清除未确认的帖子
另一方面,允许未经验证/未知的用户填写Post表单并将其存储在DB中(特别是如果Post模型很大和/或允许ie添加文件)不是一个好主意,因为这会带来垃圾邮件和DoS攻击的风险,所以在发送表单之前要求验证可能更容易(ajax?)就像这样。在评论系统中,如discus或livefyre她,我说的是形式(如消息或帖子!)信息,而不是身份验证信息!也许我的问题不清楚,我编辑了一篇博客文章,为Ajax制作了一个示例+1:尝试用Ajax提交表单数据。如果由于用户未经身份验证或其会话超时而失败,请使用Ajax对其进行身份验证,然后重试发送数据。客户端从不离开发送数据的页面,因此不需要实现自定义数据存储或登录后重定向系统。