如何调用/ api / auth / {provider}作为弹出窗口(ajax)而不是完整帖子?

时间:2014-11-11 19:02:49

标签: servicestack

我希望通过无缝弹出窗口替换一个做社交身份验证的工具包,其中入口点是一个javascript函数,并且你安装了javascript回调函数,一旦所有内容异步进行,就会将验证结果传回给你处理。

socialbootstrap示例显示如何对/ api / auth / {provider}发送帖子,这会导致浏览器重定向到社交提供程序的登录屏幕,然后返回到原始应用程序中的redirectUrl。

我希望将这项工作放在某种弹出窗口中,并将结果作为某种ajax结果或javascript成功或失败处理程序传递给我。

这可能吗?如果有,你知道任何显示这个的代码示例吗?

我的理解是,iframe不是一种普遍好的方法,因为一些社交提供商有iframe破坏者......

由于

1 个答案:

答案 0 :(得分:0)

如果您只需要支持凭据,即UserName/Password身份验证,则可以通过Popup和ajax中的HTML执行此操作。

当您点击使用电子邮件登录按钮或登录链接(位于右上角)时,https://httpbenchmarks.servicestack.net直播演示会显示此示例。

身份验证/登录过程为documented in detiail the repository,例如,它使用模式引导程序表单和ss-utils bindForm来激活HTML表单并提供自动表单和验证绑定。

成功验证后,会触发success回调,您可以隐藏模态表单并运行任何其他验证后脚本,例如:

$("#form-login").bindForm({
    success: function (r) {
        $('#modalLogin').modal('hide');
        localStorage["UserName"] = $("[name=UserName]").val();
        $(document).trigger('signed-in');
    }
});

现在,对用户会话进行了身份验证,每个后续的ajax请求都会在用户身份验证会话的上下文中发送。

如果您想使用OAuth,那么您需要坚持整页重新加载,因为该页面通常会被重定向到第三方网站,用户需要通过您的应用明确允许进行身份验证。