Skip to content
Prev Previous commit
add logout and session support
  • Loading branch information
martinbedouret committed Jan 19, 2018
commit f382e30ca6f1797cf8e8cdcd920cb106b2db8fe4
55 changes: 53 additions & 2 deletions api/controllers/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ module.exports = {
removeUser: removeUser,
getUser: getUser,
updateUser: updateUser,
loginUser: loginUser
loginUser: loginUser,
logoutUser: logoutUser
};

function createUser(req, res) {
Expand Down Expand Up @@ -162,10 +163,60 @@ function loginUser(req, res) {
} else {
req.session.userId = user._id;
var tokenString = auth.issueToken(username, role);
user.authToken = tokenString;
user.save(function (err, user) {
if (err) {
return res.status(500).json({
message: 'Error saving user ' + err
});
}
if (!user) {
return res.status(404).json({
message: 'Unable to find user. User id: ' + user._id
});
}
});
return res.status(200).json({
token: tokenString,
message: "Token successfully generated"
});
}
});
}
}
function logoutUser(req, res) {
var username = req.body.username;
var password = req.body.password;
User.authenticate(username, password, function (error, user) {
if (error || !user) {
return res.status(401).json({
message: "Wrong email or password."
});
}
if (req.session) {
// delete session object
req.session.destroy(function (err) {
if (err) {
return res.status(500).json({
message: 'Error removing session ' + err
});
}
});
}
user.authToken = '';
user.save(function (err, user) {
if (err) {
return res.status(500).json({
message: 'Error saving user ' + err
});
}
if (!user) {
return res.status(404).json({
message: 'Unable to find user. User id: ' + user._id
});
}
});
return res.status(200).json({
message: "User successfully logout"
});
});
}
33 changes: 33 additions & 0 deletions api/swagger/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,33 @@ paths:
description: Error
schema:
$ref: "#/definitions/ErrorResponse"
/user/logout:
x-swagger-router-controller: user
post:
operationId: logoutUser
description: Destroys user session and authentication token.
security:
- Bearer: []
x-security-scopes:
- admin
- user
parameters:
- name: info
description: User properties
in: body
required: true
schema:
$ref: "#/definitions/User"
responses:
"200":
description: Success
schema:
$ref: "#/definitions/LogoutResponse"
default:
description: Error
schema:
$ref: "#/definitions/ErrorResponse"

# complex objects have schema definitions
definitions:
User:
Expand Down Expand Up @@ -304,5 +331,11 @@ definitions:
properties:
token:
type: string
message:
type: string
LogoutResponse:
required:
- message
properties:
message:
type: string
81 changes: 36 additions & 45 deletions app.js
Original file line number Diff line number Diff line change
@@ -1,58 +1,49 @@
'use strict';

var SwaggerExpress = require('swagger-express-mw');
var app = require('express')();
var swaggerTools = require('swagger-tools');
var YAML = require('yamljs');
var auth = require("./api/helpers/auth");
var swaggerConfig = YAML.load("./api/swagger/swagger.yaml");
var db = require('./db');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);

const config = require('./config');

var swaggerConfig = YAML.load("./api/swagger/swagger.yaml");

module.exports = app; // for testing

//var swaggerConfig = {
// appRoot: __dirname // required config,
//};

/*bbdd configuration in its own file*/
require('./db');

swaggerTools.initializeMiddleware(swaggerConfig, function(middleware) {
//Serves the Swagger UI on /docs
app.use(middleware.swaggerMetadata()); // needs to go BEFORE swaggerSecurity

app.use(
middleware.swaggerSecurity({
//manage token function in the 'auth' module
Bearer: auth.verifyToken
})
);

var routerConfig = {
controllers: "./api/controllers",
useStubs: false
};

app.use(middleware.swaggerRouter(routerConfig));

app.use(middleware.swaggerUi());

var port = process.env.PORT || 10010;
app.listen(port, function() {
console.log("Started server on port 10010");
});
swaggerTools.initializeMiddleware(swaggerConfig, function (middleware) {
//Serves the Swagger UI on /docs
app.use(middleware.swaggerMetadata()); // needs to go BEFORE swaggerSecurity
app.use(middleware.swaggerSecurity({
//manage token function in the 'auth' module
Bearer: auth.verifyToken
})
);
//use sessions for tracking logins
app.use(session({
secret: 'work hard',
resave: true,
saveUninitialized: false,
store: new MongoStore({
mongooseConnection: db
})
}));


var routerConfig = {
controllers: "./api/controllers",
useStubs: false
};

app.use(middleware.swaggerRouter(routerConfig));

app.use(middleware.swaggerUi());

var port = process.env.PORT || 10010;
app.listen(port, function () {
console.log("Started server on port " + port);
});
});

//
//SwaggerExpress.create(swaggerConfig, function(err, swaggerExpress) {
// if (err) { throw err; }
//
// // install middleware
// swaggerExpress.register(app);
//
// var port = process.env.PORT || 10010;
// app.listen(port);
//
//});
13 changes: 0 additions & 13 deletions config/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,6 @@ const defaults = {
jwtSecret: 'asdfgASDFG12345'
};

//var nodemailer = require('nodemailer');
//var smtpTransport = nodemailer.createTransport({
// from: '[email protected]',
// options: {
// host: 'smtp.sendgrid.net',
// port: 465,
// secure: true,
// auth: {
// user: 'apikey',
// pass: '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'
// }
// }
// });
/**
* Expose
*/
Expand Down
4 changes: 3 additions & 1 deletion db.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,6 @@ mongoose.connection.on('disconnected', () => console.log('Disconnected from data
process.on('SIGINT', () => mongoose.connection.close( () => {
console.log('Finished App and disconnected from database');
process.exit(0);
}));
}));

module.exports = mongoose.connection;
Loading