Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@ var AngularFullstackGenerator = yeoman.generators.Base.extend({

var angModules = [
"'ngCookies'",
"'ngStorage'",
"'ngResource'",
"'ngSanitize'"
];
Expand Down
3 changes: 2 additions & 1 deletion app/templates/_bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
"bootstrap-sass-official": "~3.1.1",<% } %>
"bootstrap": "~3.1.1",<% } %>
"angular-resource": ">=1.2.*",
"angular-cookies": ">=1.2.*",
"angular-cookies": "~1.2.21",
"ngstorage": "~0.3.0",
"angular-sanitize": ">=1.2.*",<% if(filters.ngroute) { %>
"angular-route": ">=1.2.*",<% } %><% if(filters.uibootstrap) { %>
"angular-bootstrap": "~0.11.0",<% } %>
Expand Down
4 changes: 4 additions & 0 deletions app/templates/client/app/account(auth)/login/login(html).html
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ <h1>Login</h1>
<input type="password" name="password" class="form-control" ng-model="user.password">
</div>

<div class="checkbox">
<input type="checkbox" value="remember-me" ng-model="user.rememberme"> Remember me
</div>

<div class="form-group has-error">
<p class="help-block" ng-show="form.email.$error.required && form.password.$error.required && submitted">
Please enter your email and password.
Expand Down
3 changes: 3 additions & 0 deletions app/templates/client/app/account(auth)/login/login(jade).jade
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ div(ng-include='"components/navbar/navbar.html"')
.form-group
label Password
input.form-control(type='password', name='password', ng-model='user.password')
.checkbox
input(type='checkbox' value='remember-me' ng-model='user.rememberme')
| Remember me

.form-group.has-error
p.help-block(ng-show='form.email.$error.required && form.password.$error.required && submitted')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ angular.module '<%= scriptAppName %>'
Auth.login
email: $scope.user.email
password: $scope.user.password
rememberme : $scope.user.rememberme

.then ->
$location.path '/'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ angular.module('<%= scriptAppName %>')
if(form.$valid) {
Auth.login({
email: $scope.user.email,
password: $scope.user.password
password: $scope.user.password,
rememberme : $scope.user.rememberme
})
.then( function() {
// Logged in, redirect to home
Expand Down
5 changes: 3 additions & 2 deletions app/templates/client/app/app(coffee).coffee
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@ angular.module '<%= scriptAppName %>', [<%= angularModules %>]
$locationProvider.html5Mode true<% if(filters.auth) { %>
$httpProvider.interceptors.push 'authInterceptor'<% } %>
<% } %><% if(filters.auth) { %>
.factory 'authInterceptor', ($rootScope, $q, $cookieStore, $location) ->
.factory 'authInterceptor', ($rootScope, $q, $localStorage, $cookies, $location) ->
# Add authorization token to headers
request: (config) ->
config.headers = config.headers or {}
config.headers.Authorization = 'Bearer ' + $cookieStore.get 'token' if $cookieStore.get 'token'
token = $localStorage.token||$cookies.token
config.headers.Authorization = 'Bearer ' + token if token
config

# Intercept 401s and redirect you to login
Expand Down
10 changes: 6 additions & 4 deletions app/templates/client/app/app(js).js
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@ angular.module('<%= scriptAppName %>', [<%= angularModules %>])
$httpProvider.interceptors.push('authInterceptor');<% } %>
})<% } %><% if(filters.auth) { %>

.factory('authInterceptor', function ($rootScope, $q, $cookieStore, $location) {
.factory('authInterceptor', function ($rootScope, $q, $localStorage, $cookies, $location) {
return {
// Add authorization token to headers
request: function (config) {
config.headers = config.headers || {};
if ($cookieStore.get('token')) {
config.headers.Authorization = 'Bearer ' + $cookieStore.get('token');
var token = $localStorage.token||$cookies.token;
if (token) {
config.headers.Authorization = 'Bearer ' + token;
}
return config;
},
Expand All @@ -33,7 +34,8 @@ angular.module('<%= scriptAppName %>', [<%= angularModules %>])
if(response.status === 401) {
$location.path('/login');
// remove any stale tokens
$cookieStore.remove('token');
delete $localStorage.token;
delete $cookies.token;
return $q.reject(response);
}
else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
'use strict'

angular.module '<%= scriptAppName %>'
.factory 'Auth', ($location, $rootScope, $http, User, $cookieStore, $q) ->
currentUser = if $cookieStore.get 'token' then User.get() else {}
.factory 'Auth', ($location, $rootScope, $http, User, $localStorage, $cookies, $q) ->
currentUser = if $localStorage.token||$cookies.token then User.get() else {}

###
Authenticate user and save token
Expand All @@ -16,9 +16,13 @@ angular.module '<%= scriptAppName %>'
$http.post '/auth/local',
email: user.email
password: user.password
rememberme : user.rememberme

.success (data) ->
$cookieStore.put 'token', data.token
if user.rememberme
$localStorage.token = data.token
else
$cookies.token = data.token
currentUser = User.get()
deferred.resolve data
callback?()
Expand All @@ -37,7 +41,8 @@ angular.module '<%= scriptAppName %>'
@param {Function}
###
logout: ->
$cookieStore.remove 'token'
delete $localStorage.token
delete $cookies.token
currentUser = {}
return

Expand All @@ -52,7 +57,7 @@ angular.module '<%= scriptAppName %>'
createUser: (user, callback) ->
User.save user,
(data) ->
$cookieStore.put 'token', data.token
$cookies.token = data.token
currentUser = User.get()
callback? user

Expand Down Expand Up @@ -133,4 +138,4 @@ angular.module '<%= scriptAppName %>'
Get auth token
###
getToken: ->
$cookieStore.get 'token'
$localStorage.token||$cookies.token
24 changes: 14 additions & 10 deletions app/templates/client/components/auth(auth)/auth.service(js).js
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
'use strict';

angular.module('<%= scriptAppName %>')
.factory('Auth', function Auth($location, $rootScope, $http, User, $cookieStore, $q) {
var currentUser = {};
if($cookieStore.get('token')) {
currentUser = User.get();
}
.factory('Auth', function Auth($location, $rootScope, $http, User, $localStorage, $cookies, $q) {

var currentUser = ($localStorage.token||$cookies.token) ? User.get() : {};

return {

Expand All @@ -22,10 +20,15 @@ angular.module('<%= scriptAppName %>')

$http.post('/auth/local', {
email: user.email,
password: user.password
password: user.password,
rememberme : user.rememberme
}).
success(function(data) {
$cookieStore.put('token', data.token);
if (user.rememberme) {
$localStorage.token = data.token;
} else {
$cookies.token = data.token;
}
currentUser = User.get();
deferred.resolve(data);
return cb();
Expand All @@ -45,7 +48,8 @@ angular.module('<%= scriptAppName %>')
* @param {Function}
*/
logout: function() {
$cookieStore.remove('token');
delete $localStorage.token;
delete $cookies.token;
currentUser = {};
},

Expand All @@ -61,7 +65,7 @@ angular.module('<%= scriptAppName %>')

return User.save(user,
function(data) {
$cookieStore.put('token', data.token);
$cookies.token = data.token;
currentUser = User.get();
return cb(user);
},
Expand Down Expand Up @@ -140,7 +144,7 @@ angular.module('<%= scriptAppName %>')
* Get auth token
*/
getToken: function() {
return $cookieStore.get('token');
return $localStorage.token||$cookies.token;
}
};
});
1 change: 1 addition & 0 deletions app/templates/karma.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ module.exports = function(config) {
'client/bower_components/angular-mocks/angular-mocks.js',
'client/bower_components/angular-resource/angular-resource.js',
'client/bower_components/angular-cookies/angular-cookies.js',
'client/bower_components/ngstorage/ngStorage.js',
'client/bower_components/angular-sanitize/angular-sanitize.js',
'client/bower_components/angular-route/angular-route.js',<% if(filters.uibootstrap) { %>
'client/bower_components/angular-bootstrap/ui-bootstrap-tpls.js',<% } %>
Expand Down
6 changes: 3 additions & 3 deletions app/templates/server/auth(auth)/auth.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,16 +56,16 @@ function hasRole(roleRequired) {
/**
* Returns a jwt token signed by the app secret
*/
function signToken(id) {
return jwt.sign({ _id: id }, config.secrets.session, { expiresInMinutes: 60*5 });
function signToken(id, role, expire) {
return jwt.sign({ _id: id, role : role }, config.secrets.session, { expiresInMinutes: expire ? 60*24*7 : 60*5 });
}

/**
* Set token cookie directly for oAuth strategies
*/
function setTokenCookie(req, res) {
if (!req.user) return res.json(404, { message: 'Something went wrong, please try again.'});
var token = signToken(req.user._id, req.user.role);
var token = signToken(req.user._id, req.user.role, req.body.rememberme);
res.cookie('token', JSON.stringify(token));
res.redirect('/');
}
Expand Down
3 changes: 2 additions & 1 deletion test/fixtures/bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
"bootstrap-stylus": "latest",
"bootstrap": "~3.1.1",
"angular-resource": ">=1.2.*",
"angular-cookies": ">=1.2.*",
"angular-cookies": "~1.2.21",
"ngstorage": "~0.3.0",
"angular-sanitize": ">=1.2.*",
"angular-route": ">=1.2.*",
"angular-bootstrap": "~0.11.0",
Expand Down