Я хочу сделать простую авторизацию на основе роли в AngularJS и FireBase (admin, user). Я сделал базовую авторизацию и маршрутизацию (посмотрите на 3 файла ниже).Как сделать простую авторизацию на основе роли в AngularJS и FireBase?
Я нашел repository в github и article, но код слишком тяжелый для меня. Есть ли более простой способ? Как изменить свой код, чтобы добавить эту функцию? Буду благодарен за ссылки на статьи и репозитории, которые могут мне помочь.
app.js
var app = angular.module('journalApp', [ 'firebase', 'ngRoute' ]);
app.constant('FIREBASE', '<FIREBASE URL>');
app.config([ '$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider.when('/login', {
templateUrl: 'views/login.html',
controller: 'loginCtrl',
controllerAs: 'loginCtl'
});
$routeProvider.when('/logout', {
templateUrl: 'views/login.html',
controller: 'loginCtrl',
controllerAs: 'loginCtl',
resolve: {
"logout": [ "authService", function(authService) {
authService.signOut();
}]
}
});
$routeProvider.when('/', {
templateUrl: 'views/dashboard.html',
resolve: {
"currentAuth": [ "authService", function(authService) {
var auth = authService.auth();
return auth.$requireSignIn();
}]
}
});
$routeProvider.otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode(true);
} ]);
app.run([ "$rootScope", "$location", function($rootScope, $location) {
$rootScope.$on("$routeChangeError", function(event, next, previous, error) {
if (error === "AUTH_REQUIRED") {
$location.path("/login");
}
});
} ]);
loginCtrl.js
app.controller('loginCtrl', [ 'authService', function(authService) {
var self = this;
self.signUp = function() {
authService.createUser(self.email, self.password);
};
self.logIn = function() {
authService.authUser(self.loginEmail, self.loginPassword);
};
self.signOut = function() {
authService.signOut();
};
}]);
authFactory.js
app.factory('authService', [ '$firebaseAuth', '$window', function($firebaseAuth, $window) {
var authService = {};
var auth = $firebaseAuth(firebase.auth());
authService.createUser = function(email, password) {
auth.$createUserWithEmailAndPassword(email, password);
};
authService.authUser = function(email, password) {
auth.$signInWithEmailAndPassword(email, password).then(function(user) {
$window.location.href = "/";
}, function(error) {
var errorCode = error.code;
var errorMessage = error.message;
console.info("Error in authUser - errorCode: " + errorCode + ". errorMessage: " + errorMessage);
});
};
authService.signOut = function() {
auth.$signOut();
};
authService.auth = function() {
return auth;
};
return authService;
}]);
Спасибо. Хорошие статьи. –
Хороший репозиторий ссылок! Я также настоятельно рекомендую «опрятный трюк №2» из этого разговора на входе/выходе этого года: https://youtu.be/5hYMDfDoHpI?t=9m13s –
Firebase только что запустила поддержку доступа на основе ролей через пользовательские заявки на токен идентификатора : https://firebase.google.com/docs/auth/admin/custom-claims – bojeil