Skip to content

Commit 45dfce4

Browse files
committed
Logout functionality
1 parent e842833 commit 45dfce4

File tree

6 files changed

+51
-14
lines changed

6 files changed

+51
-14
lines changed

app/public/js/controllers.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,19 @@ var LoginCtrl = ['$scope', 'UserService', function($scope, UserService){
1717
UserService.login($scope.loginForm.username, $scope.loginForm.password, function(res){
1818
if(!res.success){
1919
$scope.errorMessage = "<strong>Oh no!</strong> Invalid username or password";
20+
}else{
21+
//success, clear the form now in case it is reused later
22+
$scope.loginForm.username = "";
23+
$scope.loginForm.password = "";
2024
}
2125
});
2226

2327
};
28+
29+
$scope.logout = function(){
30+
UserService.logout();
31+
}
32+
2433
}];
2534

2635
var RegisterCtrl = ['$scope', 'UserService', function($scope, UserService){
@@ -38,9 +47,19 @@ var RegisterCtrl = ['$scope', 'UserService', function($scope, UserService){
3847
}, function(res){
3948
if(!res.success){
4049
$scope.errorMessage = res.error;
50+
}else{
51+
//success, clear the form now in case it is reused later
52+
$scope.registrationForm.username = "";
53+
$scope.registrationForm.password = "";
54+
$scope.registrationForm.email = "";
4155
}
4256
});
4357
}
58+
59+
$scope.logout = function(){
60+
UserService.logout();
61+
}
62+
4463
}];
4564

4665
var PodiumCtrl = ['$scope', function($scope){

app/public/js/services.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@ angular.module('podiumServices', ['ngResource'])
55
.factory('UserService', function($resource){
66

77
var loginRequest = $resource('api/login', {}, {});
8+
var logoutRequest = $resource('api/logout', {}, {});
89
var registerRequest = $resource('api/register', {}, {});
10+
var loginStatusRequest = $resource('api/loginstatus', {}, {});
911

1012
var userService = {
1113

14+
//Consider either:
15+
//pull defaults from local storage to prevent the flash while waiting for status on load
16+
//nodeJS to interfere with the serving of index to push some state, how do others do this?
17+
1218
isLoggedIn: false,
1319
user: false,
1420

@@ -43,9 +49,28 @@ angular.module('podiumServices', ['ngResource'])
4349
}
4450
callback(res);
4551
});
52+
},
53+
54+
checkLoginStatus: function(){
55+
loginStatusRequest.get({}, function(res){
56+
userService.isLoggedIn = res.loggedIn;
57+
userService.user = res.user;
58+
});
59+
},
60+
61+
logout: function(){
62+
logoutRequest.get({}, function(res){
63+
console.log(res);
64+
if(res.success){
65+
userService.isLoggedIn = false;
66+
userService.user = false;
67+
}
68+
});
4669
}
4770
};
4871

72+
userService.checkLoginStatus();
73+
4974
return userService;
5075

5176
});

app/public/partials/login.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<div ng-controller="LoginCtrl" ng-switch="UserService.isLoggedIn" id="login-container">
22
<div ng-switch-when="true">
3-
<h2>Welcome {{loggedInAs}}</h2>
3+
<h2>Welcome {{UserService.user.username}}</h2>
4+
<button type="submit" id="btn-logout" class="btn btn-primary" ng-click="logout()">Logout</button>
45
</div>
56
<div ng-switch-when="false">
67
<form method="post" id="login-form" class="well span4">

app/public/partials/register.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ <h2>Register</h2>
1919
</div>
2020
<div ng-switch-when="true">
2121
<h2>You are already registered</h2>
22+
<button type="submit" id="btn-logout" class="btn btn-primary" ng-click="logout()">Logout</button>
2223
</div>
2324
</div>

app/server/controllers/userController.js

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,6 @@ var login = function (username, password, callback){
3636
});
3737
}
3838

39-
var ifValid = function(fn){
40-
return function(){
41-
42-
if(arguments.length === 0){
43-
return;
44-
}
45-
46-
return fn.apply(this, arguments);
47-
}
48-
}
49-
5039
var register = function(user, callback){
5140
user.roles = [ "authenticated" ]
5241
userDatasource.create(user, function(record){

app/server/routes/userRoute.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,17 @@ var performLogin = function(username, password, req, res){
9292

9393
exports.logout = function(req, res){
9494
req.session.destroy();
95-
res.send();
95+
res.jsonp({success: true});
9696
};
9797

9898
// route to test if the user is logged in or not
9999
exports.loginStatus = function(req, res) {
100100

101101
var publicUserData = false;
102+
var loggedIn = false;
102103

103104
if(req.session.loggedIn){
105+
loggedIn = true;
104106
publicUserData = {
105107
id: req.session.user.id,
106108
username: req.session.user.username,
@@ -109,7 +111,7 @@ exports.loginStatus = function(req, res) {
109111
}
110112

111113
res.jsonp({
112-
loggedin: req.session.loggedIn,
114+
loggedIn: loggedIn,
113115
user: publicUserData
114116
});
115117
//res.send(req.session["loggedIn"] ? 'true' : 'false');

0 commit comments

Comments
 (0)