我正在尝试编写一种表单提交机制,如果用户需要进行身份验证,但是一旦用户进行了身份验证,我希望自动提交表单,而无需用户再次填写值,甚至只需点击按钮即可。
例如,典型的案例是在经过身份验证之前在博客上发帖。通常,未登录的用户将完成帖子,单击“帖子”,然后被重定向到身份验证页面,一旦通过身份验证,他将不需要返回并填写帖子并再次单击“帖子”。
在 Play 中实现这一点的正确方法是什么?
是否应该在重定向到身份验证之前将表单数据存储在 session 中?
也许在身份验证页面中存储对触发身份验证的操作的引用,以便执行第二次重定向?
最佳答案
在 session 中存储临时帖子不是一个好主意, session 存储在 cookie 中,因此它的大小有限。最有可能的是,您需要将其存储到数据库(带有一些标志,即unauthicated: true
),并在 session 中仅存储临时帖子的ID,并最终存储一些唯一的 token 。因此,在身份验证后,您可以从 session 中获取这些值并使用重定向,这允许在登录后进一步编辑和最终发布。
在这种情况下,我还建议使用一些调度程序,它将在几个小时/天后清除未确认的帖子。
另一方面,允许未经身份验证/未知的用户填写 Post 表单并将其存储在数据库中(特别是如果 Post 模型很大和/或允许添加文件)并不是一个好主意,因为它带来了风险垃圾邮件和 DoS 攻击,所以也许在表单发送(ajax?)之前要求身份验证会更容易,就像完成的那样。在 disqus 或 livefyre 等评论系统中。关于scala - 如何 "hold form submission"并在Play Framework中进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20797206/