Este documento descreve como implementar autenticação em uma aplicação AngularJS usando os módulos "login", "main" e "dashboard" e a biblioteca loadOnDemand. O documento explica a estrutura de pastas do projeto e como os controladores verificam se o usuário está logado ao mudar de rota.
2. 1 – A ideia
Criar uma autenticação utilizando AngularJS e loadOnDemand, para isso criarei
três módulos “login”, “main” e “dashboard” que para acessá-los será preciso digitar um
login e senha.
2 – Ferramentas
- AngularJS - http://angularjs.org/
- loadOnDemand - https://github.com/AndyGrom/loadOnDemand
3 – Observações
- Não explicarei como fazer o backend.
- Alterei o loadOnDemand e tem um tutorial explicando isso.
4 – Mão na massa!!
3. Explicando a estrutura de pastas
Obs.: Este tutorial vai focar apenas no diretório “public”
Explicando:
- Diretório controllers, vai ficar todos os controllers que utilizaremos no AngularJS
- Diretório common, vai ficar os arquivos que será utilizado nos controllers
- Diretório lib, ficará as bibliotecas utilizadas, como AngularJS e loadOnDemand
- Diretório view, ficará os html da aplicação
- O arquivo App.js será o pontapé inicial da aplicação
5. $app.run(function($rootScope, $location, SessionIdService){
$rootScope.showLoaderFlag = false;
$rootScope.showLoader=function(){
$rootScope.showLoaderFlag=true;
}
$rootScope.hideLoader=function(){
$rootScope.showLoaderFlag=false;
}
$rootScope.server = function(url){
return SERVER_URL + url;
}
$rootScope.$on("$routeChangeStart", function(event, next, current) {
if(!SessionIdService.checkLoggedIn()){
$location.path("/login");
}
});
});
$app.filter('startFrom', function() {
return function(input, start) {
if (input==null) {
return null;
}
start = +start; //parse to int
return input.slice(start);
}
});
Observe o trecho em negrito, defini que sempre ao modificar a rota verifique se o
usuário está logado. Se NÃO estiver redirecione o mesmo para “login”.
7. 5 – Arquivo dependence.js – public/js/common
angular.module('dependence',[]).factory('SessionIdService',
['$rootScope','$http','$location',function($rootScope,$http,$location){
var setLoggedIn=function(){
s['auth']=true;
};
var redirectHome=function(){
s={};
$location.path('/',true);
};
var s={};
return {
set: function(key,val) {
s[key]=val;
},
get: function(key) {
if(!angular.isDefined(s[key])){
return false;
}
return s[key];
},
logout: function() {
$http.get($rootScope.server('/auth')).success(function(){
s={};
window.location=window.location.origin+window.location.pathname;
});
},
checkLoggedIn: function(){
if(s['auth']) {
return true;
} else {
$http.get($rootScope.server('/auth')).success(setLoggedIn).error(redirectHome);
}
}
};
}]);
Este arquivo é o segredo da coisa, ele será utilizado em todos os módulos criados
e será o responsável em verificar se o usuário está ou não logado.