我开始在我的play / scala应用程序中集成SecureSocial,但我不太喜欢它在不同视图之间所做的所有重定向。
示例 - 尝试从其默认登录页面登录,如果您输入了错误的通行证,您将被重定向到不同的页面(网址),但使用相同的登录表单。唯一不同的是,有一条错误信息......
我想要一个简单的登录表单(用户/密码提供程序)在我的主页的角落,使用ajax提交它的数据,这些数据在服务器上验证,并且响应显示错误消息或更改window.location。 在此表单旁边,我将添加一个链接,转到更高级的登录页面,添加选项以使用其他提供程序,如fb / twitter等。 但是从那个页面我还想用ajax提交细节并得到回复。
我试图浏览SecureSocial源,但在那里有点迷失。
任何人都可以告诉我如何使用SecureSocial但不使用任何观点吗?
注意:我对定制他们的观点不感兴趣,这不只是一个CSS /设计问题,我想要处理Ajaxly的登录细节而不是正常的表单提交,然后是重定向......
答案 0 :(得分:2)
在SecureSocial代码中进行了一些搜索之后,我对它的运作方式有了更深入的了解。
您可以使用play.plugins文件中列出的任何提供程序单独使用您自己的登录/身份验证代码来验证用户的信息。只需确保发送提供商所需的正确参数。
我喜欢SecureSocial的ProviderController类基于参数动态决定使用哪个提供程序的方式。但我不喜欢它所做的响应 - 重定向..我想用一些数据响应ajax请求,让客户端js处理它。
这是我的解决方案:
几乎将所有ProviderController代码复制到我自己的Auth.scala文件(一个Controller)。 更改了与“case ex,case _”相关的重定向,保留了重定向成功auth,因为它添加了与用户相关的SecureSocial会话密钥。 从我的路由文件中删除了所有与SecureSocial相关的路由。 使用logintype(userpass / google / fb / etc ...)添加一个额外的隐藏字段,并配置我的登录ajax post以将其与帖子一起发送到我的Auth控制器。
如果您需要更多信息评论,我会编辑答案。