0

Я хочу сделать простую авторизацию на основе роли в 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; 
}]); 

ответ

4
+0

Спасибо. Хорошие статьи. –

+0

Хороший репозиторий ссылок! Я также настоятельно рекомендую «опрятный трюк №2» из этого разговора на входе/выходе этого года: https://youtu.be/5hYMDfDoHpI?t=9m13s –

+1

Firebase только что запустила поддержку доступа на основе ролей через пользовательские заявки на токен идентификатора : https://firebase.google.com/docs/auth/admin/custom-claims – bojeil

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