Tutorial de inicio de sesión simple de Firebase usuario faltante
-
26-12-2019 - |
Pregunta
Tutorial: http://www.thinkster.io/angularjs/wBhtRLWHIR/6-authentication-users-with-a-service
Estoy siguiendo este tutorial y parece que pierdo mi usuario tan pronto como se registra.
Aquí está mi fábrica auth.js:
'use strict';
app.factory('Auth', function($firebaseSimpleLogin, FIREBASE_URL, $rootScope){
var ref = new Firebase(FIREBASE_URL);
var auth = $firebaseSimpleLogin(ref);
var Auth = {
register : function(user) {
return auth.$createUser(user.email, user.password);
},
signedIn : function() {
// PROBLEM: authUser is always null
console.log(auth.user);
return auth.user !== null;
},
logout : function () {
auth.$logout();
}
};
$rootScope.signedIn = function () {
return Auth.signedIn();
};
return Auth;
});
Aquí está mi controlador auth.js:
'use strict';
app.controller('AuthCtrl', function($scope, $location, Auth){
if (Auth.signedIn()) {
$location.path('/');
}
$scope.register = function () {
Auth.register($scope.user).then(function (authUser) {
console.log(authUser);
$location.path('/');
});
};
});
El archivo console.log firmado en la fábrica siempre es nulo.¿Alguna idea de dónde está la desconexión?El registro en sí funciona bien y authUser
se completa en console.log en el controlador al registrarse.
Solución 2
Encontré una pregunta muy similar que está más lejos en el tutorial: no puedeMostrar botón de cierre de sesión después de $ createuser
En la respuesta, aprendí que Angularfire se usó para registrar automáticamente al usuario después de que se creó.Aparentemente, ahora ya no es lo que es por eso que la autenticación. El usuario en firmedin fue nulo.
Otros consejos
La documentación más reciente para Angularfire dice que el $createUser
método de $firebaseSimpleLogin
devuelve una promesa pero no menciona cualquier parámetros que se pasan al then
llamar de vuelta.
Puedes usar el $getUsuarioActual Método para obtener el usuario actual después de que el usuario se registre.
El tutorial necesita ser actualizado y usted debe siempre Verifique la documentación de las bibliotecas que esté utilizando usted mismo.
Su código para iniciar sesión debería verse así:
Auth.signedIn = function() {
auth.$getCurrentUser().then(function(currentUser) {
console.log(currentUser);
}, function() {
console.log('error');
});
};
Ahora estoy haciendo el mismo tutorial.Este código (en Auth Controller) trabajó para mí:
$scope.register = function () {
Auth.register($scope.user).then(function (authUser) {
console.log(authUser);
Auth.login($scope.user);
$location.path('/');
});
};
Soy un N00B total, pero lo que (creo) Esto está haciendo es autenticar al usuario, luego ejecutando una función que registra el usuario justo después.El botón de cierre de sesión ahora está funcionando como se esperaba.