我有一个简单的Firebase Facebook OAuth登录设置,如下面的official tutorial用于Ionic Firebase Facebook登录。
问题是,一旦我点击登录Facebook按钮,我就被重定向到Facebook,我登录,然后我被重定向回我的应用程序。但问题是我留在登录页面。奇怪的是,如果我通过按F5 ionic serve
触发器来物理刷新浏览器(使用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>
&#13;
编辑:我使用$ 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的资源很少就足够了,但就我而言,情况并非如此)。
答案 0 :(得分:4)
发布在github上的问题,但也会在这里回复。
这仅在使用function Get-MongoDBCollection ($connectionString, $db, $collection)
{
$mongoClient = New-Object MongoDB.Driver.MongoClient($connectionString)
$mongoServer = $mongoClient.GetServer()
$mongoDatabase = $mongoServer.GetDatabase($db)
$mongoCollection = $mongoDatabase.GetCollection($collection)
return $mongoCollection
}
的浏览器中发生。该示例适用于cordova应用程序,因此这不应该是一个问题。
但如果你真的需要它,你可以跳过重定向并使用弹出窗口。
$authWithOAuthRedirect
答案 1 :(得分:4)
这是在最新的Firebase JS客户端版本(2.3.0)中修复的错误。您现在可以使用$authWithOAuthRedirect
,并在导航回页面时触发$ onAuth回调。