2015-01-23 2 views
0

В соответствии с AngularFire Auth API, $authWithOAuthRedirect должно вернуть обещание, которое было разрешено после возвращения в ваше приложение. Я создал фабрику ниже, но обещание в login(), похоже, не разрешает после успешного авторизации; на консоль ничего не записывается. Так что $state.go() не стреляет, и пользователь не перенаправляется в состояние app.

(function (angular) { 

    'use strict'; 

    var module = angular.module('app'); 

    module.factory('AuthFactory', [ 
     '$firebaseAuth', 
     '$state', 
     'Config', 
     function ($firebaseAuth, $state, Config) { 

      var ref = new Firebase(Config.firebase.api); 
      var FirebaseAuth = $firebaseAuth(ref); 

      FirebaseAuth.login = function() { 
       return this.$authWithOAuthRedirect('google') 
        .then(function (authData) { 
         console.log('Logged in as:', authData.uid, authData); 
         $state.go('app'); 
        }) 
        .catch(function (error) { 
         console.error('Authentication failed:', error); 
        }); 
      }.bind(FirebaseAuth); 

      return FirebaseAuth; 
     } 
    ]); 

}(window.angular)); 

Если я вхожу $getAuth в контроллере, я могу видеть, работал Логин однажды я освежать. Так может ли кто-нибудь пролить свет на то, почему он не перенаправляется так, как ожидалось?

ответ

1

Обещание, полученное от authWithOAuthRedirect(), немного вводит в заблуждение, поскольку оно никогда не будет выполнено. Поскольку браузер будет перенаправляться со страницы, мы никогда не сможем использовать это обещание, потому что состояние страницы было потеряно при успешном перенаправлении.

Если вы находитесь на странице своего приложения, которую хотите автоматически перенаправить при входе пользователя в систему, попробуйте ref.onAuth(function(authData) { ... }). authData будет не нулевым, если пользователь выполнит вход в систему.

+0

Я думал, что это так, я думал, что я просто что-то пропустил! Спасибо - принятый ответ. – RogerH

Смежные вопросы