【问题标题】:Using securesocial services without using its views在不使用其视图的情况下使用安全社交服务
【发布时间】:2013-01-19 10:04:11
【问题描述】:

我开始在我的 play/scala 应用程序中集成 SecureSocial,但我不太喜欢它在不同视图之间所做的所有重定向。

示例 - 尝试从它的默认登录页面登录,如果您输入错误的密码,您将被重定向到不同的页面 (url),但使用相同的登录表单。唯一不同的是有错误信息...

我想要一个简单的登录表单(用户/密码提供程序)在我的主页的角落,它使用 ajax 提交它的数据,这些数据在服务器上得到验证,并做出响应以显示错误消息或更改窗口位置。 在此表单旁边,我将放置一个链接以转到更高级的登录页面,该页面添加了使用其他提供商(如 fb/twitter 等)的选项。 但是从那个页面我也想使用 ajax 来提交详细信息并获得响应。

我尝试浏览 SecureSocial 源,但在其中迷失了方向。

谁能告诉我如何使用 SecureSocial,但不使用它的任何视图?

注意:我对自定义他们的视图不感兴趣,这不仅仅是 CSS/设计问题,我想通过 Ajaxly 处理登录详细信息,而不是通过正常的表单提交和重定向...

【问题讨论】:

    标签: ajax authentication login playframework securesocial


    【解决方案1】:

    在对 SecureSocial 代码进行了更多的翻找之后,我对它的运作方式有了更好的了解。

    您可以单独使用您在 play.plugins 文件中列出的任何提供程序,通过您自己的登录/身份验证代码对用户信息进行身份验证。只需确保发送提供者需要的正确参数即可。

    我喜欢 SecureSocial 的 ProviderController 类根据参数动态决定使用哪个提供者的方式。但我不喜欢它做出的响应 - 重定向。我想用一些数据响应 ajax 请求,让客户端 js 处理它。

    这是我的解决方案:

    几乎将所有 ProviderController 代码复制到我自己的 Auth.scala 文件(控制器)中。 更改了与“case ex, case _”相关的重定向,在添加与用户相关的 SecureSocial 会话密钥时保持重定向成功验证。 从我的路由文件中删除了所有与 SecureSocial 相关的路由。 使用 logintype (userpass/google/fb/etc...) 放置一个额外的隐藏字段,并配置我的登录 ajax 帖子以将其与帖子一起发送到我的 Auth 控制器。

    如果您需要更多信息,请在此处评论,我会编辑答案。

    【讨论】:

    • 我很感兴趣...基本上,因为我在弹出窗口中显示登录屏幕,如果用户登录或取消我不想重新加载页面(并丢失用户的输入)...我只想关闭弹出窗口并在必要时更新登录状态。我想我需要一个 Ajax 登录来实现这一点。
    • 抱歉,评论有点晚。是的,你需要 ajax 和安全的社会工作与页面正常请求和重定向......最终我停止使用它并创建了我自己的几个受 auth20 模块启发的身份验证类。它并不太复杂,而且最灵活:)
    • 我也有同样的问题。我想从我的 Play 应用程序中删除所有 HTML 模板(包括 SecureSocial 自定义模板)并用 JSON/JavaScript 替换它们。我开始对 SecureSocial 资源进行一些修改......但由于我只需要一个用户名/密码提供程序,我认为值得创建自己的解决方案。你能给我一些关于你如何解决这个问题的提示吗?是否有任何好的教程或示例可以帮助我编写一个像样的 auth api?谢谢。
    • 当然,我使用 play-auth 作为基础,从:github.com/t2v/play2-auth 开始。如果您只需要用户密码,这对您来说非常有用。与安全的社交相比,它为您提供了更多的控制权。您可以定义登录成功/失败时发生的操作,定义如何验证登录等。缺点(或优点)是您必须自己制作登录屏幕。我更进一步,还更改了一些登录令牌机制。 cookie 机制对我们的产品不利。我们需要一些适用于移动应用程序的东西。您可以在 stackoveflow 上找到很多 auth 建议。我就是这样做的。
    • 您是否遇到过“java.lang.ClassNotFoundException:securesocial.controllers.ReverseProviderController”的问题。我接受了您的建议并复制了 ProviderController。现在可以使用正确的凭据登录,但如果凭据错误,SecureSocial 会尝试实例化这个由于某种原因现在没有生成的生成类(即使我在路由文件中保留了对它的引用)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多