angularjs – Firebase $authWithOAuthRedirect在没有页面刷新的
我有一个简单的Firebase Facebook OAuth登录设置,如下面的
official tutorial for Ionic Firebase Facebook登录.
问题是,一旦我点击登录与Facebook按钮,我被重定向到Facebook,我登录,然后我被重定向回我的应用程序.但问题是我留在登录页面.奇怪的是,如果我通过按F5来物理刷新我的浏览器(使用离子服务测试)onAuth触发器,我将被重定向到Items页面.如果我不刷新浏览器,则不会调用onAuth. 有人有这个问题吗?你是怎么解决的? 请注意,是的,我做了我的研究(并且稍微开始失去它),但无法让它发挥作用.我搜索了SO,尝试使用google群组的$timeout,试图调用$scope.$apply(),但都无济于事 – 所以请帮我弄清楚我做错了什么? .controller('AppCtrl',function($scope,Items,Auth,$state,$ionicHistory) { $scope.login = function(provider) { Auth.$authWithOAuthRedirect(provider).then(function(authData) { }).catch(function(error) { if (error.code === "TRANSPORT_UNAVAILABLE") { Auth.$authWithOAuthPopup(provider).then(function(authData) { }); } else { console.log(error); } }); }; $scope.logout = function() { Auth.$unauth(); $scope.authData = null; $window.location.reload(true); }; Auth.$onAuth(function(authData) { if (authData === null) { console.log("Not logged in yet"); $state.go('app.login'); } else { console.log("Logged in as",authData.uid); $ionicHistory.nextViewOptions({ disableBack: true }); $state.go('app.items'); } $scope.authData = authData; // This will display the user's name in our view }); }) <ion-view view-title="Members area"> <ion-content padding="true"> <div ng-if="!authData"> <button class="button button-positive button-block" ng-click="login('facebook')">Log In with Facebook</button> </div> <div ng-if="authData.facebook"> <div class="card"> <div class="item item-text-wrap">Hello {{authData.facebook.displayName}}!</div> </div> <button class="button button-assertive button-block" ng-click="logout()">Log out</button> </div> </ion-content> </ion-view> 编辑:我通过使用$timeout来解决它: $timeout(function(){ Auth.$onAuth(function(authData) { if (authData === null) { console.log("Not logged in yet"); $state.go('app.login'); } else { console.log("Logged in as",authData.uid); $ionicHistory.nextViewOptions({ disableBack: true }); $state.go('app.items'); } $scope.authData = authData; // This will display the user's name in our view }); },3000); 然而,这只是感觉不对(温和地放),并且必须有更好的方法,所以请建议一个.此外,我注意到高达3秒的延迟几乎不够(我发现建议500ms的资源很少就足够了,但在我的情况下,情况并非如此). 解决方法
发表在github上的问题,但也会在这里回复.
这只发生在使用$authWithOAuthRedirect的浏览器中.该示例适用于cordova应用程序,因此这不应该是一个问题. 但如果你真的需要它,你可以跳过重定向并使用弹出窗口. Auth.$authWithOAuthPopup(authMethod).then(function(authData) { console.dir(authData); }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |