SlideShare a Scribd company logo
1 of 9
Download to read offline
Autenticação
com
AngularJS e
loadOnDemand
Author: Douglas Lira
douglas.lira.web@gmail.com
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!!
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
1 – Arquivo App.js - public/js
//URL de acesso ao servidor RESTful
SERVER_URL = "http://localhost/public/api";
$app = angular.module('App',['loadOnDemand','dependence']);
$app.config(function($routeProvider, $locationProvider, $httpProvider){
$routeProvider.
when('/',{template:'<div load-on-demand="'Dashboard'" load-view="0"></div>'}).
when('/main',{template:'<div load-on-demand="'Main'" load-view="0"></div>'}).
when('/login',{template:'<div load-on-demand="'Login'" load-view="0"></div>'}).
when('/dashboard',{template:'<div load-on-demand="'Dashboard'" load-view="0"></div>'}).
otherwise({redirectTo:'/'});
$httpProvider.responseInterceptors.push(function($q,$rootScope) {
return function(promise) {
$rootScope.hideLoader();
return promise.then(function(response) {
return(response);
}, function(response) {
$data = response.data;
$error = $data.error;
console.error($data);
if ($error && $error.text) {
alert("ERROR: " + $error.text);
} else{
if (response.status = 404) {
alert("Erro ao acessar servidor!");
} else {
alert("ERROR! Veja o log");
}
}
return $q.reject(response);
});
}
});
}).config(['$loadOnDemandProvider', function($loadOnDemandProvider) {
var modules = [{
name: 'Login',
script: 'js/controllers/LoginController.js',
template: ['view/login/main.html']
},{
name: 'Main',
script: 'js/controllers/MainController.js',
template: ['view/main/main.html']
},{
name: 'Dashboard',
script: 'js/controllers/DashboardController.js',
template: ['view/dashboard/main.html']
},{
name: 'dependence',
script: 'js/common/dependence.js'
}];
$loadOnDemandProvider.config(modules);
}]);
$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”.
2 – Arquivo DashboardController.js – public/js/controllers/
angular.module('Dashboard',['dependence']).controller('DashboardController',
function($scope,$http,$routeParams,$location) {
console.log("OK ESTÁ LOGADO!!");
});
3 – Arquivo MainController.js – public/js/controllers/
angular.module('Main',['dependence']).controller('MainController', function($scope,$http,
$routeParams,$location) {
console.log("OK ESTÁ LOGADO!!");
});
4 – Arquivo LoginController.js – public/js/controllers/
angular.module('Login',['dependence']).controller('LoginController', function($scope,
$http,$routeParams,$location,$rootScope) {
$scope.user = {email:'',password:''};
$scope.loginUser = function(user) {
$scope.resetError();
$http.post($scope.server('/auth'), user).success(function(login) {
if(login.sessionId === null) {
$scope.setError(login.status);
return;
}
$scope.user.email = '';
$scope.user.password = '';
$rootScope.SessionId = login.sessionId;
$location.path("/main");
}).error(function() {
$scope.setError('Login e/ou senha invalida');
});
}
$scope.resetError = function() {
$scope.error = false;
$scope.errorMessage = '';
}
$scope.setError = function(message) {
$scope.error = true;
$scope.errorMessage = message;
$rootScope.SessionId = '';
}
});
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.
5 – Arquivo main.html – public/view/dashboard/main.html
<h1>DASHBOARD</h1>
<br>
<br>
<a href="#/main">[MAIN]</a> - <a href="#/dashboard">[DASHBOARD]</a>
6 – Arquivo main.html – public/view/main/main.html
<h1>MAIN</h1>
<br>
<br>
<a href="#/main">[MAIN]</a> - <a href="#/dashboard">[DASHBOARD]</a>
7 – Arquivo main.html – public/view/login/main.html
<section id="main" ng-controller="LoginController">
<div class="container">
<div class="row-fluid">
<div class="span12">
<div class="login-container center">
<form class="login-form">
<ul class="fields-list">
<li>
<i class="icon-user" style="float: left;"></i>
<input ng-model="user.email" id="username" name="username" type="text">
</li>
<li>
<i class="icon-key"></i>
<input ng-model="user.password" id="password" name="password" type="password">
</li>
</ul>
<div class="actions">
<input class="btn btn-green btn-large login-btn" name="commit"
type="button" ng-disabled="!user.email || !user.password" ng-click="loginUser(user)"
value="Entrar">
</div>
</form>
</div>
</div>
</div>
</div>
</section>
8 – Arquivo index.html – index.html
<!doctype html>
<html ng-app="App">
<head>
<meta charset="utf-8">
<title>Auth com AngularJS – By Douglas Lira</title>
<!-- JS ============================================================ -->
<script src="js/lib/jquery-1.10.2.js"></script>
<script src="js/lib/bootstrap.min.js"></script>
<script src="js/lib/angular.min.js"></script>
<script src="js/lib/angular-resource.min.js"></script>
<script src="js/lib/loadOnDemand.js"></script>
<!-- AngularJS ====================================================== -->
<script type="text/javascript" src="js/App.js"></script>
<script type="text/javascript" src="js/common/dependence.js"></script>
</head>
<body id="body">
<div class="container" ng-view></div>
</body>
</html>
8 – Considerações finais.
Bom espero que tenham gostado. Caso tenha dúvidas acesse o grupo angularjs-
br@googlegroups.com

More Related Content

What's hot

Como Perder Peso (no browser)
Como Perder Peso (no browser)Como Perder Peso (no browser)
Como Perder Peso (no browser)Zeno Rocha
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJSRodrigo Branas
 
Meu primeiro tema de WordPress
Meu primeiro tema de WordPressMeu primeiro tema de WordPress
Meu primeiro tema de WordPressLuan Muniz
 
AngularJS sem medo
AngularJS sem medoAngularJS sem medo
AngularJS sem medoDouglas Lira
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontMichel Ribeiro
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Rodrigo Urubatan
 
Descomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao FrameworkDescomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao FrameworkPablo Garrido
 
Estendendo o html com angular js
Estendendo o html com angular jsEstendendo o html com angular js
Estendendo o html com angular jsEvaldo Barbosa
 
Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007Jaime Schettini
 
Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroEduardo Shiota Yasuda
 
Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Guga Alves
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVCEder Magalhães
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasRodrigo Branas
 
Um futuro chamado Web Components
Um futuro chamado Web ComponentsUm futuro chamado Web Components
Um futuro chamado Web ComponentsZeno Rocha
 
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)Evandro Klimpel Balmant
 
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSDesenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSRomulo Fagundes
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.jsGiovanni Bassi
 

What's hot (20)

Como Perder Peso (no browser)
Como Perder Peso (no browser)Como Perder Peso (no browser)
Como Perder Peso (no browser)
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJS
 
Tracking.js
Tracking.jsTracking.js
Tracking.js
 
jQuery
jQueryjQuery
jQuery
 
Meu primeiro tema de WordPress
Meu primeiro tema de WordPressMeu primeiro tema de WordPress
Meu primeiro tema de WordPress
 
AngularJS sem medo
AngularJS sem medoAngularJS sem medo
AngularJS sem medo
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_
 
Descomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao FrameworkDescomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao Framework
 
Estendendo o html com angular js
Estendendo o html com angular jsEstendendo o html com angular js
Estendendo o html com angular js
 
Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007
 
Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zero
 
Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013
 
Java script aula 09 - JQuery
Java script   aula 09 - JQueryJava script   aula 09 - JQuery
Java script aula 09 - JQuery
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Um futuro chamado Web Components
Um futuro chamado Web ComponentsUm futuro chamado Web Components
Um futuro chamado Web Components
 
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
 
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSDesenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 

Similar to AngularJS Auth

Desenvolvimento de sistemas web com PHP Frameworks - Aula 2
Desenvolvimento de sistemas web com PHP Frameworks - Aula 2Desenvolvimento de sistemas web com PHP Frameworks - Aula 2
Desenvolvimento de sistemas web com PHP Frameworks - Aula 2Thyago Maia
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoIonic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoAlamo Saravali
 
Odi tutorial configuração repositórios mestre e trabalho
Odi tutorial   configuração repositórios mestre e trabalhoOdi tutorial   configuração repositórios mestre e trabalho
Odi tutorial configuração repositórios mestre e trabalhoCaio Lima
 
Joomla + Moodle = Joomdle
Joomla + Moodle = JoomdleJoomla + Moodle = Joomdle
Joomla + Moodle = JoomdleObiz
 
J query apostila - noções básicas
J query   apostila - noções básicasJ query   apostila - noções básicas
J query apostila - noções básicasLuciano Marwell
 
JQuery - introdução ao
JQuery - introdução ao JQuery - introdução ao
JQuery - introdução ao Daniel Filho
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Thyago Maia
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Thyago Maia
 
Como desenvolver uma aplicação Web com django 2.2.13 (Parte 2 de 2)
Como desenvolver uma aplicação Web com django 2.2.13 (Parte 2 de 2)Como desenvolver uma aplicação Web com django 2.2.13 (Parte 2 de 2)
Como desenvolver uma aplicação Web com django 2.2.13 (Parte 2 de 2)Pedro Fernandes Vieira
 
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Tchelinux
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraFlávio Lisboa
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Python e Django
Python e DjangoPython e Django
Python e Djangopugpe
 

Similar to AngularJS Auth (20)

Desenvolvimento de sistemas web com PHP Frameworks - Aula 2
Desenvolvimento de sistemas web com PHP Frameworks - Aula 2Desenvolvimento de sistemas web com PHP Frameworks - Aula 2
Desenvolvimento de sistemas web com PHP Frameworks - Aula 2
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoIonic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
 
Django Módulo Básico Parte II
Django Módulo Básico Parte IIDjango Módulo Básico Parte II
Django Módulo Básico Parte II
 
Odi tutorial configuração repositórios mestre e trabalho
Odi tutorial   configuração repositórios mestre e trabalhoOdi tutorial   configuração repositórios mestre e trabalho
Odi tutorial configuração repositórios mestre e trabalho
 
Joomla + Moodle = Joomdle
Joomla + Moodle = JoomdleJoomla + Moodle = Joomdle
Joomla + Moodle = Joomdle
 
J query apostila - noções básicas
J query   apostila - noções básicasJ query   apostila - noções básicas
J query apostila - noções básicas
 
JQuery - introdução ao
JQuery - introdução ao JQuery - introdução ao
JQuery - introdução ao
 
J query basico
J query basicoJ query basico
J query basico
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
 
Como desenvolver uma aplicação Web com django 2.2.13 (Parte 2 de 2)
Como desenvolver uma aplicação Web com django 2.2.13 (Parte 2 de 2)Como desenvolver uma aplicação Web com django 2.2.13 (Parte 2 de 2)
Como desenvolver uma aplicação Web com django 2.2.13 (Parte 2 de 2)
 
Php 05 Mvc
Php 05 MvcPhp 05 Mvc
Php 05 Mvc
 
Crud
CrudCrud
Crud
 
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
 
Moodle api tutorial
Moodle api   tutorialMoodle api   tutorial
Moodle api tutorial
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Python e Django
Python e DjangoPython e Django
Python e Django
 

More from Douglas Lira

Criando um componente de busca com AngularJS
Criando um componente de busca com AngularJSCriando um componente de busca com AngularJS
Criando um componente de busca com AngularJSDouglas Lira
 
Directive com AngularJS - Datepicker
Directive com AngularJS - DatepickerDirective com AngularJS - Datepicker
Directive com AngularJS - DatepickerDouglas Lira
 
AngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IOAngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IODouglas Lira
 
Mude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBMude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBDouglas Lira
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUIDouglas Lira
 

More from Douglas Lira (7)

Criando um componente de busca com AngularJS
Criando um componente de busca com AngularJSCriando um componente de busca com AngularJS
Criando um componente de busca com AngularJS
 
Directive com AngularJS - Datepicker
Directive com AngularJS - DatepickerDirective com AngularJS - Datepicker
Directive com AngularJS - Datepicker
 
AngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IOAngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IO
 
Time sheet
Time sheetTime sheet
Time sheet
 
Mude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBMude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDB
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUI
 
Plugin zend acl
Plugin zend aclPlugin zend acl
Plugin zend acl
 

AngularJS Auth

  • 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
  • 4. 1 – Arquivo App.js - public/js //URL de acesso ao servidor RESTful SERVER_URL = "http://localhost/public/api"; $app = angular.module('App',['loadOnDemand','dependence']); $app.config(function($routeProvider, $locationProvider, $httpProvider){ $routeProvider. when('/',{template:'<div load-on-demand="'Dashboard'" load-view="0"></div>'}). when('/main',{template:'<div load-on-demand="'Main'" load-view="0"></div>'}). when('/login',{template:'<div load-on-demand="'Login'" load-view="0"></div>'}). when('/dashboard',{template:'<div load-on-demand="'Dashboard'" load-view="0"></div>'}). otherwise({redirectTo:'/'}); $httpProvider.responseInterceptors.push(function($q,$rootScope) { return function(promise) { $rootScope.hideLoader(); return promise.then(function(response) { return(response); }, function(response) { $data = response.data; $error = $data.error; console.error($data); if ($error && $error.text) { alert("ERROR: " + $error.text); } else{ if (response.status = 404) { alert("Erro ao acessar servidor!"); } else { alert("ERROR! Veja o log"); } } return $q.reject(response); }); } }); }).config(['$loadOnDemandProvider', function($loadOnDemandProvider) { var modules = [{ name: 'Login', script: 'js/controllers/LoginController.js', template: ['view/login/main.html'] },{ name: 'Main', script: 'js/controllers/MainController.js', template: ['view/main/main.html'] },{ name: 'Dashboard', script: 'js/controllers/DashboardController.js', template: ['view/dashboard/main.html'] },{ name: 'dependence', script: 'js/common/dependence.js' }]; $loadOnDemandProvider.config(modules); }]);
  • 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”.
  • 6. 2 – Arquivo DashboardController.js – public/js/controllers/ angular.module('Dashboard',['dependence']).controller('DashboardController', function($scope,$http,$routeParams,$location) { console.log("OK ESTÁ LOGADO!!"); }); 3 – Arquivo MainController.js – public/js/controllers/ angular.module('Main',['dependence']).controller('MainController', function($scope,$http, $routeParams,$location) { console.log("OK ESTÁ LOGADO!!"); }); 4 – Arquivo LoginController.js – public/js/controllers/ angular.module('Login',['dependence']).controller('LoginController', function($scope, $http,$routeParams,$location,$rootScope) { $scope.user = {email:'',password:''}; $scope.loginUser = function(user) { $scope.resetError(); $http.post($scope.server('/auth'), user).success(function(login) { if(login.sessionId === null) { $scope.setError(login.status); return; } $scope.user.email = ''; $scope.user.password = ''; $rootScope.SessionId = login.sessionId; $location.path("/main"); }).error(function() { $scope.setError('Login e/ou senha invalida'); }); } $scope.resetError = function() { $scope.error = false; $scope.errorMessage = ''; } $scope.setError = function(message) { $scope.error = true; $scope.errorMessage = message; $rootScope.SessionId = ''; } });
  • 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.
  • 8. 5 – Arquivo main.html – public/view/dashboard/main.html <h1>DASHBOARD</h1> <br> <br> <a href="#/main">[MAIN]</a> - <a href="#/dashboard">[DASHBOARD]</a> 6 – Arquivo main.html – public/view/main/main.html <h1>MAIN</h1> <br> <br> <a href="#/main">[MAIN]</a> - <a href="#/dashboard">[DASHBOARD]</a> 7 – Arquivo main.html – public/view/login/main.html <section id="main" ng-controller="LoginController"> <div class="container"> <div class="row-fluid"> <div class="span12"> <div class="login-container center"> <form class="login-form"> <ul class="fields-list"> <li> <i class="icon-user" style="float: left;"></i> <input ng-model="user.email" id="username" name="username" type="text"> </li> <li> <i class="icon-key"></i> <input ng-model="user.password" id="password" name="password" type="password"> </li> </ul> <div class="actions"> <input class="btn btn-green btn-large login-btn" name="commit" type="button" ng-disabled="!user.email || !user.password" ng-click="loginUser(user)" value="Entrar"> </div> </form> </div> </div> </div> </div> </section>
  • 9. 8 – Arquivo index.html – index.html <!doctype html> <html ng-app="App"> <head> <meta charset="utf-8"> <title>Auth com AngularJS – By Douglas Lira</title> <!-- JS ============================================================ --> <script src="js/lib/jquery-1.10.2.js"></script> <script src="js/lib/bootstrap.min.js"></script> <script src="js/lib/angular.min.js"></script> <script src="js/lib/angular-resource.min.js"></script> <script src="js/lib/loadOnDemand.js"></script> <!-- AngularJS ====================================================== --> <script type="text/javascript" src="js/App.js"></script> <script type="text/javascript" src="js/common/dependence.js"></script> </head> <body id="body"> <div class="container" ng-view></div> </body> </html> 8 – Considerações finais. Bom espero que tenham gostado. Caso tenha dúvidas acesse o grupo angularjs- br@googlegroups.com