我正在构建一个Apache Cordova移动应用程序,使用Azure移动服务对Google进行身份验证。要做到这一点,我使用的是WinJS azure客户端:
var client = new WindowsAzure.MobileServiceClient("<myMobileService>", "<myKey>");
function logIntoGoogle() {
client.login("google").done(function(results){
//do something
},
function (error) {
alert(error);
});
}
应用程序点击logIntoGoogle,成功登录后,应用程序会导航到 [myMobileService] / login / done ,而不是返回完成的承诺,并执行回调。
我错过了什么,拜托?
答案 0 :(得分:2)
好的,事实证明问题不在于我使用azure API。这更像是我的cordova应用程序的设置/配置问题。
我需要安装phonegap设备插件 (https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git)
和phonegap InAppBrowser插件(https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git)。
安装完成后,返回承诺并执行回调。
答案 1 :(得分:0)
关于我最初告诉你的关于源代码没有承诺的事情:我错了。在花了几个小时浏览完所有关于Microsoft Azure的文档后,我终于看起来甚至对实际发生的事情有了一些了解。
如果 isSingleSignOn 未设置为 true ,则似乎有条件提供回调URL以进行身份验证。所以你应该试试
client.login("google", null, true).done(function(results){
以使其成功。
我希望这能解决你的问题,而不是我的第一个答案。如果你仍然遇到问题,请告诉我,所以我可以深入探讨代码库.. :)
<强>更新强>
实际上,正是因为你在没有InAppBrowser的情况下在Cordova上运行。当我浏览代码时,我发现有 3 login UIs ,根据它们的可用性决定使用的是哪一个。从这三个中,唯一导致URL重定向的是 WebAuthBroker ,它仅在Windows Phone上可用。 WebAuthBroker使用 Windows.Security.Authentication.Web.WebAuthenticationBroker ,它再次使用 authenticateAndContinue ,如果不使用 isSingleSignOn 导致重定向。这再次导致我提供的解决方案。
另外两个用户界面是 Cordova弹出窗口和浏览器弹出窗口。这样它就可以使用它认为可用的“最佳”UI。