2015-12-31 1 views
3

J'essaie de me connecter avec google dans mon projet firebase et j'obtiens une erreur de transport indisponible avec les fonctions popup et redirection de firebase. Est-ce parce que je travaille localement ou est-ce que je fais quelque chose de mal ici?Transport Non disponible pour OAuth

var app = angular.module('WOM', ["firebase"]); 
app.controller('SampleCtrl', ['$scope', '$firebaseObject', '$firebaseAuth', function($scope, $firebaseObject, $firebaseAuth){ 
var ref = new Firebase('https://who-owes-me.firebaseio.com/'); //Where data is stored 
var auth = $firebaseAuth(ref); 

$scope.login = function() { 
    $scope.authData = null; 
    $scope.error = null; 

    auth.$authWithOAuthPopup("google").then(function(authData){ 
     $scope.authData = authData; 
    }).catch(function(error){ 
     $scope.error = error; 
    }); 
} 

$scope.data = $firebaseObject(ref); //assign data to scope 

$scope.data.$loaded() 
    .then(function(){ 
     console.log($scope.data); 
    }) 
    .catch(function(err){ 
     console.error(err); 
    }) 
}]); 

Répondre

4

Cela signifie probablement que vous travaillez sur le système de fichiers.

Pour exécuter les méthodes Auth, vous devez travailler sur un serveur de bonne foi. C'est une bonne pratique en général de se développer sur un serveur local plutôt que sur le système de fichiers car c'est plus proche de l'environnement de production.

Try the http-server npm module to get up and running quickly.

+0

génial! Merci David –

+1

Une alternative à 'http-server' est d'utiliser la commande' firebase serve' de la Firebase CLI. –

+0

@ david-east J'ai une application angulaire hébergée dans firebase et elle fonctionne bien dans les navigateurs. Mais j'ai créé une application webview iOS pour cela. Et j'obtiens TRANSPORT_UNAVAILABLE en essayant de se connecter avec facebook en utilisant l'application iOS. Des idées? – adolfosrs

1

je courais dans le même problème lors du développement d'une application angulaire hébergé dans firebase.

Il fonctionnait bien dans les navigateurs, mais en l'ouvrant dans une application webview iOS, il a commencé à obtenir TRANSPORT_UNAVAILABLE en essayant de se connecter avec facebook.

D'abord je suis entré dans la documentation Firebase pour Dealing with Popups and Redirects et cela m'a pris dans authWithOAuthRedirect mais il ne fonctionnait pas non plus. Après cela, j'ai découvert que j'utilisais un firebase version with a known issue concernant authWithOAuthRedirect qui a été résolu dans la version 2.4.1. Assurez-vous donc d'utiliser la version 2.4.2 ou de migrer votre application vers la base de données Firebase 3.0.

Je rencontrais encore d'autres problèmes et après un peu plus de recherches sur ce sujet, j'ai commencé à utiliser le onAuth avec mes authentifications. onAuth est appelée chaque fois que vos utilisateurs s'authentifient avec succès. Cela rend tout plus facile.

Donc, mon contrôleur de connexion est à la recherche comme suit:

.controller('LoginCtrl', ['$scope', 'Auth', 'fbutil', 'FBURL', function($scope, Auth, fbutil, FBURL) { 

    var ref = new Firebase(FBURL); 
    ref.onAuth(function(authData){ 
     if (authData){ 
     //User authenticated. Do your logic. 
     } 
    }); 

    $scope.fbLogin = function() { 
     ref.authWithOAuthPopup("facebook", function(error, authData) { 
      if (error){ 
      if (error.code === "TRANSPORT_UNAVAILABLE") { 
       Auth.$authWithOAuthRedirect("facebook", function(error) { 
       console.log(error); 
       }); 
      } 
      $scope.err = errMessage(error); 
      } 
     }); 
    }; 
})