【发布时间】:2015-06-10 03:06:39
【问题描述】:
我在子域上有一个 api:用 symfony2 编写的 api.exemple.com 和我在 exemple.com 上的主要应用程序(SPA - AngularJs)。
我想允许用户将他们的 Facebook 帐户与他们的本地帐户相关联。我不知道如何继续通过我的应用进行身份验证并使用第三方 oauth 提供程序。
你有什么线索吗?
谢谢
【问题讨论】:
标签: angularjs api symfony oauth
我在子域上有一个 api:用 symfony2 编写的 api.exemple.com 和我在 exemple.com 上的主要应用程序(SPA - AngularJs)。
我想允许用户将他们的 Facebook 帐户与他们的本地帐户相关联。我不知道如何继续通过我的应用进行身份验证并使用第三方 oauth 提供程序。
你有什么线索吗?
谢谢
【问题讨论】:
标签: angularjs api symfony oauth
在角度方面,首先打开一个新窗口并向您的 oauth 处理程序发送一个 get 请求:
self.oauthConnect = function(provider)
{
var url = apiPrefix + '/oauth/tokens/'. provider;
oauthWindow = $window.open(url,'_blank', 'height=600, width=600, top=100, left=300, modal=yes');
oauthWindow.focus();
};
然后您的 PHP api 站点将重定向到 oauth 提供程序站点(即 facebook)。我们使用一个新的客户端窗口,因此尽管重定向,我们的 SPA 仍会继续运行。然后提供者显示他们的登录屏幕并使用 oauth 令牌信息进行重定向。
您的 PHP api 站点会执行所需的操作并生成实际的授权令牌(提示:使用 json Web 令牌)。然后该站点将一个 html 页面返回给您的 Angular 应用程序。
<body>
<script>
window.opener.oauthCallback('<?php echo $oauthToken; ?>');
</script>
</body>
然后将使用 oauth 令牌调用您的角度控制器(打开窗口)。
$window.oauthCallback = function(oauthToken)
{
oauthWindow.close();
oauthWindow = null;
authManager.oauthToken = oauthToken;
self.oauthSubmit();
};
简单吧?不是真的,但它有效。就我而言,我右转并:
POST /auth/tokens/oauthToken
获取真正的应用程序令牌。这样我的 oauth 服务就可以用于多个应用程序。
【讨论】: