Skip to content

Instantly share code, notes, and snippets.

@ananthhh
Last active November 20, 2015 13:52
Show Gist options
  • Select an option

  • Save ananthhh/2895814a714103810b78 to your computer and use it in GitHub Desktop.

Select an option

Save ananthhh/2895814a714103810b78 to your computer and use it in GitHub Desktop.
AnguarJS Authentication
(function () {
'use strict';
angular
.module('auth', ['LocalStorageModule'])
.config(authInterceptor)
.run(runRestrictions);
// Configurations
authInterceptor.$inject = ['$httpProvider'];
/* @ngInject */
/**
* Routes configuration
* @param $httpProvider
*/
function authInterceptor ($httpProvider) {
$httpProvider.interceptors.push(interceptor);
}
interceptor.$inject = ['$rootScope'];
/* @ngInject */
function interceptor ($rootScope) {
return {
'request': function(config) {
config.headers['Authorization'] = 'Bearer ' + ($rootScope.session
? $rootScope.session.getAccessToken() : '');
return config;
}
}
}
runRestrictions.$inject = ['$rootScope', '$location', 'session'];
/* @ngInject */
function runRestrictions ($rootScope, $location, session) {
$rootScope.auth = auth;
$rootScope.session = session;
var roleHomes = {
'Developer': '/home'
};
$rootScope.$on('$routeChangeStart', function (event, next) {
var user = session.getUser();
if(!next.$$route) return;
if((next.$$route.isPublic && user) ||
(!next.$$route.isPublic && user && next.$$route.roles.indexOf(user.role) === -1)) {
$location.path(roleHomes[user.role])
}
});
}
})();
(function () {
'use strict';
angular
.module('auth')
.service('session', session);
session.$inject = ['localStorageService'];
/* @ngInject */
function session(localStorageService) {
var session = this;
session._user = JSON.parse(localStorageService.get('session.user'));
session._accessToken = localStorageService.get('session.accessToken');
session.getUser = getUser;
session.setUser = setUser;
session.getAccessToken = getAccessToken;
session.setAccessToken = setAccessToken;
session.destroy = destroy;
////////////////
function getUser() {
return session._user
}
function setUser(user) {
session._user = user;
localStorageService.set('session.user', JSON.stringify(user));
return session;
}
function getAccessToken() {
return session._accessToken;
}
function setAccessToken(accessToken) {
session._accessToken = accessToken;
localStorageService.set('session.accessToken', accessToken)
}
function destroy () {
session._user = null;
session._accessToken = null;
localStorageService.clearAll();
}
}
})();
(function () {
'use strict';
angular
.module('auth')
.service('auth', auth);
auth.$inject = ['$http', 'session'];
/* @ngInject */
function auth($http, session) {
this.signIn = signIn;
this.getUser = getUser;
this.logout = logout;
////////////////
function signIn(credentials) {
return $http
.post('/api/signin', credentials)
.then(function(result){
session.setAccessToken(result.data.token);
return result.data.token;
});
}
function getUser() {
return $http
.get('/api/me')
.then(function(result){
session.setUser(result.data.user);
return result.data.user;
});
}
function logout() {
return $http
.get('/api/signout')
.then(function(result){
session.destroy();
return result;
})
}
}
})();
(function () {
'use strict';
angular
.module('app', [])
.config(routes);
routes.$inject = ['$routeProvider'];
/* @ngInject */
function routes ($routeProvider) {
$routeProvider.when('/', {
templateUrl: 'landing/Landing.html',
controller: 'LandingController',
controllerAs: 'vm',
// These variables are used for authentication
isPublic: true,
roles: []
})
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment