我有一个AngularJS应用程序,以及使用ASP.NET Identity 2.0的WebApi2。
我正在尝试使用Facebook账户登录用户。
我正在使用这个答案来实现它。
获取认证提供程序很容易,但我在下一步遇到了问题。 它说,我应该使用之前提供的URL向我的WebApi服务器发出GET请求。 所以我进行了调用,并获得了一个
但是浏览器没有重定向。 在开发者工具中,我看到向此地址发出了GET请求,但是在控制台中却出现了:
我正在使用这个答案来实现它。
获取认证提供程序很容易,但我在下一步遇到了问题。 它说,我应该使用之前提供的URL向我的WebApi服务器发出GET请求。 所以我进行了调用,并获得了一个
HTTP 302
,其Location
标头设置为Facebook的登录页面。但是浏览器没有重定向。 在开发者工具中,我看到向此地址发出了GET请求,但是在控制台中却出现了:
XMLHttpRequest cannot load [url here]. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' therefore not allowed access.
我知道这与CORS相关,但它期望Facebook的一侧启用CORS吗?
据我所了解:在登录Facebook之后,它会将我重定向回到注册ExternalLogin的WebApi方法,然后再返回我的AngularApp。这正确吗?
以下是我的登录函数代码:
function facebookLogin() {
getExternalLogins().then(function (data) {
var providerData = null;
for (var i = 0; i < data.length; i++){
if(data[i].Name == 'Facebook'){
providerData = data[i];
break;
}
}
if(providerData != null) {
window.location.href = serverBaseUrl + providerData.Url;
}
},
function (error, status) {
});
}
更新:
感谢CBroe的评论,我已经成功重定向到Facebook的登录页面。 接下来的问题是,在登录后,Facebook会将我重定向回我的WebApi。 如何将用户重定向回Angular应用程序? WebApi可以从各种地方调用,不仅仅是从example.com,还可以从example1.com或example2.com。
也许最好的方法是使用Facebook API在客户端执行此登录,然后通知服务器呢? 但是如何使用FB authResponse在WebApi上执行登录呢?
$http
? - wojciech_raklocation.href
。 - CBroe