2016-03-19 6 views
3

Ich benutze die neueste Angular + Firebase und versuche ein Login-Autorisierungssystem einzurichten. Ich habe home.html, die login + signup-Links enthält, gehe zu login.html und das Hinzufügen von Anmeldeinformationen funktioniert gut (korrekte UID beim Einreichen protokollieren), aber es soll zu Dash.html routen, geht aber zurück nach home.html.Angularfire ngRoute/Problem beheben, springt zu sonst

Ich habe herausgefunden, dass es Probleme mit meinen Auflösungsfunktionen zu sein scheint, weil das Problem verschwindet, wenn ich .otherwise entferne. Aber ich will es immer noch (brauche?) Da denke ich.

Wenn ich angemeldet bin (aber auf home.html umgeleitet wurde), kann ich immer noch auf dash.html über die URL zugreifen und ich kann nicht mehr darauf zugreifen, wenn ich die Logout-Funktion bei dash.html benutze und so sollte es sein . Aber ich kann nicht herausfinden, warum ich zu home.html in erster Linie umgeleitet werde.

Hier einige der Code ist, jede Hilfe dankbar:

Mein .run, .config und Routen.

app.run(['$rootScope', '$location', 
    function($rootScope, $location){ 
    $rootScope.$on('$routeChangeError', 
    function(event, next, previous, error){ 
    if(error === 'AUTH_REQUIRED'){ 
    $location.path('/home'); 
    } 
}); 
}]); 

app.config(['$routeProvider', '$locationProvider', function($routeProvider,  
$locationProvider){ 
$routeProvider 

.when('/home', { 
    templateUrl: '/home.html', 
    controller: 'homeController' 
}) 

.when('/login', { 
    templateUrl: '/login.html', 
    controller: 'loginController', 
    resolve: { 
     'currentAuth': ['Auth', function(Auth){ 
     return Auth.$waitForAuth(); 
    }] 
    } 
}) 

.when('/dash', { 
    templateUrl: '/dash.html', 
    controller: 'dashController', 
    resolve: { 
     'currentAuth': ['Auth', function(Auth){ 
     return Auth.$requireAuth(); 
    }] 
    } 
}) 

.otherwise({ redirectTo: '/home' }); 
}]); 

Mein Login-Controller:

app.controller('loginController', ['currentAuth', '$scope', '$firebaseAuth',  
'Auth', '$location', '$rootScope', 
function(currentAuth, $scope, $firebaseAuth, Auth, $location, $rootScope){ 
var ref = new Firebase('https://url.firebaseio.com'); 
$scope.auth = $firebaseAuth(ref); 

$scope.loginUser = function(){ 
    $scope.auth = Auth; 
    $scope.auth.$authWithPassword({ 
    email:$scope.email, 
    password:$scope.password 
    }, { 
    remember: 'sessionOnly' 
    }).then(function(authData) { 
    console.log('Logged in as: ', authData.uid); 
    $scope.auth.$onAuth(function(authData) { 
    $rootScope.auth = true; 
    $scope.auth = Auth; 
    $location.path('/dash.html'); 
    }) 

    }).catch(function(error) { 
    console.log('There was an error: ', error); 
    }); 
}; 
}]); 

Und mein Werk und Modul: var app = angular.module ('App', [ 'Feuerbasis', 'ngRoute']);

app.factory('Auth', ['$firebaseAuth', 
    function($firebaseAuth){ 
    var ref = new Firebase('https://url.firebaseio.com'); 
return $firebaseAuth(ref); 
}]); 
+0

Nicht vertraut mit Firebase, aber es fühlt sich komisch an, dass sowohl der Dienst als auch der Controller eine neue Instanz von Firebase mit der gleichen URL erstellen. Denken Sie daran, dass die Instanz innerhalb des Controllers den neuen Status haben würde, wenn der innerhalb des Dienstes nicht vorhanden wäre, und doch ist es der, der im Routing verwendet wird. – GillesC

+0

@GillesC: Vielleicht bin ich das auch nicht, aber ich denke nicht, dass das hier das Problem ist, da es offensichtlich ist, dass ich bei Autorisierung auf Dash zugreifen kann (kein auth = kein Zugriff funktioniert). Wenn ich mich anmelde, kann ich in der URL schnell blitzschnell sehen, bevor ich nach/home weiterleite. – mtorn

+0

Oder könnte es die 'AUTH_REQUIRED' sein, die nicht funktioniert? Ich habe das Gefühl, dass es etwas gibt, das sich mit dem aktuellen Problem beschäftigt, das nicht den ganzen Weg geht ... – mtorn

Antwort

0

es hat mit Ihrem Problem zu lösen.

Wenn man sich die Dokumentation aussehen firebase doc Sie werden sehen, dass sie verwenden, um die

$waitForSignIn 

oder

$requireSignIn 

Funktionen. Ich weiß das, weil ich das Gleiche gemacht habe. Versuchen Sie das stattdessen und es sollte funktionieren