From 3f0dbc85a9d02968bf39ef59eae48e86182f26ae Mon Sep 17 00:00:00 2001 From: Nicolas Fley <nicolas.fley@student.ecp.fr> Date: Sun, 4 Jun 2017 18:43:48 +0200 Subject: [PATCH] auth finished --- models/user.model.js | 75 +++++++++++++++++++++++++++++++------------- package.json | 1 + routes/auth.route.js | 34 ++++++++++++++++++-- 3 files changed, 85 insertions(+), 25 deletions(-) diff --git a/models/user.model.js b/models/user.model.js index 534598a..9e183c6 100644 --- a/models/user.model.js +++ b/models/user.model.js @@ -1,5 +1,6 @@ var Sequelize = require('sequelize'); var sequelize = require('./sequelize'); +const moment = require('moment') sequelize .authenticate() @@ -11,37 +12,65 @@ sequelize }); var Users = sequelize.define('Users', { - uName: Sequelize.STRING, + uName: { + type : Sequelize.STRING, + allowNull: false, + unique: true, + }, fName: Sequelize.STRING, lName: Sequelize.STRING, - phoneNumber: Sequelize.STRING -}, { + phoneNumber: Sequelize.STRING, + token: Sequelize.STRING, + expires: Sequelize.DATE +},{ timestamps: false, tableUser: 'Users', }); -sequelize.sync().then(() => { - Users.create({ - uName: '2015cochetg', - fName: 'Gabriel', - lName: 'Cochet', - phoneNumber: '+33631615426', - }).then(out => console.log(out.dataValues)); - - Users.create({ - uName: '2015fleyn', - fName: 'Nicolas', - lName: 'Fley', - phoneNumber: '+33650588938', - }).then(out => console.log(out.dataValues)); -}) +sequelize.sync({force:true}) + +function refreshUser(user){ + expiresTime = user.toJSON().expires + if( moment.duration(moment(expiresTime).diff(moment())).asHours() < 23){ + user.updateAttributes({ + expires : moment().add(1,'days') + }) + } +} +function refreshById(id,timeLeft){ + if( moment.duration(moment(user.expires).diff(moment())).asHours() < 23){ + return true; + }else{ + return false; + } +} function getUser(id) { return Users.findById(id); } -function addUser(uName, fName, lName, phoneNumber) { - return Users.create({ uName: uName, fName: fName, lName: lName, phoneNumber: phoneNumber }); +function getUserUName(uName) { + return Users.findOne( + { where: { uName: uName } } + ); +} + +function authUser(userInfos) { + return Users.upsert( + userInfos + ).then(function(users) { + return users; + }).catch((err) => { + console.log(err) + }) +} + +function isAuthed(uName,token){ + return Users.findOne({where : {uName : uName, token : token}}); +} + +function addUser(uName, fName, lName, phoneNumber, token, expires) { + return Users.create({ uName: uName, fName: fName, lName: lName, phoneNumber: phoneNumber, token : token, expires : expires }); } function deleteUser(id) { @@ -50,7 +79,9 @@ function deleteUser(id) { ) .then(function(users) { return users.destroy(); - }) + }).catch((err) => { + console.log(err) + }) } -module.exports = {getUser, addUser, deleteUser} \ No newline at end of file +module.exports = {getUser, addUser, deleteUser, authUser, refreshUser,getUserUName} \ No newline at end of file diff --git a/package.json b/package.json index b8e86d6..37625ec 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "debug": "~2.6.3", "express": "~4.15.2", "express-session": "^1.15.3", + "moment": "^2.18.1", "morgan": "~1.8.1", "mysql": "^2.13.0", "mysql2": "^1.3.2", diff --git a/routes/auth.route.js b/routes/auth.route.js index 4198ff4..6ffa171 100644 --- a/routes/auth.route.js +++ b/routes/auth.route.js @@ -1,7 +1,10 @@ const express = require('express'); +const moment = require('moment'); const myPassport = require('../config/my-passport'); +const userModel = require('../models/user.model'); + const router = express.Router(); router.get('/', function(req,res){ @@ -16,6 +19,10 @@ router.get('/failed', function(req,res){ res.status(200).send('Failed : <a href="/auth">Try again</a>'); }); +router.get('/success', function(req,res){ + res.status(200).send(JSON.stringify(req.session.user)); +}); + router.get('/connect', myPassport.authenticate('oauth2')); @@ -27,9 +34,30 @@ router.get('/disconnect', function(req,res){ router.get('/connect/callback', myPassport.authenticate('oauth2', { failureRedirect: '/auth/failed' }), function(req, res) { - // Successful authentication, redirect home. - req.session.connected = 1; - res.redirect('/auth'); + // Successful authentication, auth user & redirect home. + let user = res.req.user + req.session.user = null + let userInfos = { + uName : user.login, + fName : user.first_name, + lName : user.last_name, + phoneNumber : user.mobile_number, + token : req.query.code, + expires : moment().add(1,'days') + } + userModel.authUser(userInfos) + .then(()=>{ + userModel.getUserUName(userInfos.uName) + .then((loggedUser)=>{ + userModel.refreshUser(loggedUser); + req.session.user = loggedUser.toJSON(); + res.redirect('/auth/success'); + }) + }) + .catch((err) => { + console.log(err); + res.redirect('/auth/failed'); + }) } ); -- GitLab