diff options
| author | nanalelfe <nargiza.nosirova@mail.utoronto.ca> | 2016-07-27 08:59:40 +0000 |
|---|---|---|
| committer | nanalelfe <nargiza.nosirova@mail.utoronto.ca> | 2016-07-27 08:59:40 +0000 |
| commit | b0cbe2db0ee3311fc028e7229749726d4cfe6973 (patch) | |
| tree | 76f04328c7f4026f80b20fe25a1f01a78ddf7c26 | |
| parent | ef5d0e0304cea09fdd67745153e617b197667479 (diff) | |
Added third party verification.
| -rw-r--r-- | config/passport.js | 70 | ||||
| -rw-r--r-- | node_simple.js | 86 | ||||
| -rw-r--r-- | routes/index.js | 10 | ||||
| -rw-r--r-- | routes/user.js | 15 | ||||
| -rw-r--r-- | views/layouts/layout.hbs | 11 | ||||
| -rw-r--r-- | views/verification.hbs | 10 |
6 files changed, 166 insertions, 36 deletions
diff --git a/config/passport.js b/config/passport.js index be8cf10..8b3c0ad 100644 --- a/config/passport.js +++ b/config/passport.js @@ -28,23 +28,6 @@ passport.deserializeUser(function(user, done) { done(null, user); }); -/* -passport.serializeUser(function (user, done) { - console.log("In serialize User"); - console.log(user); - done(null, user._id); -}); - - -passport.deserializeUser(function(id, done) { - console.log("In de-serialize User"); - dbFile.findUserByID(id, function(err, user){ - done(err, user); - }); -});*/ - - - // fields - [email, user_name, f_name, l_name, uni, department, password, phone_num] passport.use('local_signup', new LocalStrategy({ @@ -142,15 +125,58 @@ passport.use('local_signin', new LocalStrategy({ }); })); + +/** + * verification = { + * username: username + * facebook: { + * id: id, + * token: token, + * name: name, + * email: email + * } + * } + */ + passport.use(new FacebookStrategy({ clientID: configAuth.facebookAuth.clientID, clientSecret: configAuth.facebookAuth.clientSecret, - callbackURL: configAuth.facebookAuth.callbackURL + callbackURL: configAuth.facebookAuth.callbackURL, + passReqToCallback: true + }, - function(accessToken, refreshToken, profile, done) { - User.findOrCreate(..., function(err, user) { - if (err) { return done(err); } - done(null, user); + function(req, accessToken, refreshToken, profile, done) { + console.log("Profile: "); + console.log(profile); + dbFile.userVerifiedBefore(req.user.user_name, function(err, data) { + if (err) { + return done(err); + } else if (data.length) { + if (data[0].facebookID == profile.id) { + var user = req.user; + user.login_info = data[0]; + return done(null, user); + } else { + return done(null, false, {message: "The verification account doesn't match."}); + } + } else { + var verification = { + username : req.user.user_name, + facebookID : profile.id, + facebookToken : accessToken + + } + console.log(verification); + dbFile.addVerification(verification, function (err) { + if (err) { + return done(err); + } else { + var user = req.user; + user.login_info = verification; + return done(null, user); + } + }); + } }); } ));
\ No newline at end of file diff --git a/node_simple.js b/node_simple.js index e04eccf..c0595d3 100644 --- a/node_simple.js +++ b/node_simple.js @@ -455,7 +455,8 @@ exports.retrieve_userSolutions_count = function (username, callback) { * IFF both the email and the user_name are not in the database already. * If either of them exist, the user is NOT added. * - * @param {string[]} fields: [email, user_name, f_name, l_name, uni, department, password, phone_num] + * @param {string[]} fields: [email, user_name, f_name, l_name, uni, department, password, phone_num, facebookId, facebookToken, + * facebookName, facebookEmail] * @param {function} callbackUser: of the form (<boolean1>, <boolean2>, <string>) * where, <boolean1> - * <boolean2> - @@ -539,6 +540,89 @@ exports.add_user = function (fields, callbackUser) { }); }; + + + +/* + * + * var login_data = { + facebook: { + id: fields[8], + token: fields[9], + name: fields[10], + email: fields[11] + } + }; + * + */ + + + + +exports.verifyExists = function(login_id, callBack) { + mongoFactory.getConnection(uri) + .then(function (db) { + var verif = db.collection('verifications'); + + verif.find( { facebookID : login_id } ).toArray(function(err, result) { + console.log("VERIF Y EIXSTS: "); + console.log(result); + if (err) { + throw err; + } else { + callBack(false, result); + } + + }); + }); +} + + +exports.userVerifiedBefore = function(username, callback) { + mongoFactory.getConnection(uri) + .then(function (db) { + var verif = db.collection('verifications'); + + verif.find( { username : username } ).toArray(function(err, result) { + if (err) { + callback(true, null); + } else { + callback(false, result); + } + + }); + }); +} + + +/** + * verification = { + * username: username + * facebook: { + * id: id, + * token: token, + * name: name, + * email: email + * } + * } + */ + +exports.addVerification = function(verification, callBack) { + mongoFactory.getConnection(uri) + .then(function (db) { + var verif = db.collection('verifications'); + + verif.insertOne(verification, function (err) { + if (err) { + callBack(true); + } else { + callBack(false); + } + }) + }); +} + + /** * This (helper) function returns true IFF user_name already exists in the database * diff --git a/routes/index.js b/routes/index.js index b3336dc..ed79f12 100644 --- a/routes/index.js +++ b/routes/index.js @@ -7,6 +7,7 @@ router.use(csrfProtection); // router is protected // Remove later var passport_file = require('../config/passport.js'); var bcrypt = require('bcrypt-nodejs'); +var passport = require('passport'); /* Render/GET homepage. */ router.get('/', function(req, res, next) { @@ -250,15 +251,16 @@ router.get('/solutions/:exam_id/:q_num', function (req, res) { // Redirect the user to Facebook for authentication. When complete, // Facebook will redirect the user back to the application at // /auth/facebook/callback -app.get('/auth/facebook', passport.authenticate('facebook')); +router.get('/auth/facebook', passport.authenticate('facebook')); // Facebook will redirect the user to this URL after approval. Finish the // authentication process by attempting to obtain an access token. If // access was granted, the user will be logged in. Otherwise, // authentication has failed. -app.get('/auth/facebook/callback', - passport.authenticate('facebook', { successRedirect: '/user/user_profile', - failureRedirect: '/signin' })); +router.get('/auth/facebook/callback', + passport.authenticate('facebook', { + successRedirect: '/user/user_profile', + failureRedirect: '/user/logout' })); diff --git a/routes/user.js b/routes/user.js index 74c5427..7270a9f 100644 --- a/routes/user.js +++ b/routes/user.js @@ -20,7 +20,6 @@ router.get('/logout', loggedIn, function (req, res, next) { router.get('/user_profile', loggedIn, isUser, function(req, res, next) { req.session.messages = null; - var comments = []; var inbox = []; var error = null; @@ -141,6 +140,9 @@ router.get('/signin', loggedOut, function (req, res, next) { }); }); +router.get('/verify', function(req, res, next) { + res.render('verification', {noHeader: true}); +}); router.post('/signup', loggedOut, function(req, res, next) { req.assert('fname', 'Please enter a valid first name.').notEmpty().withMessage('First name required.').isAlpha(); req.check('lname', 'Please enter a valid first name.').notEmpty().withMessage('Last name required.').isAlpha(); @@ -163,7 +165,7 @@ router.post('/signup', loggedOut, function(req, res, next) { } else { console.log("GOT SUCCESS"); passport.authenticate('local_signup', { - successRedirect: '/user/user_profile', + successRedirect: '/user/verify', failureRedirect: '/user/signup/failed', failureFlash: true })(req, res); @@ -182,7 +184,7 @@ router.post('/signin', loggedOut, function(req, res, next) { res.redirect('/signin'); } else { passport.authenticate('local_signin', { - successRedirect: '/user/user_profile', + successRedirect: '/user/verify', failureRedirect: '/user/signin', failureFlash: true })(req, res); @@ -191,6 +193,7 @@ router.post('/signin', loggedOut, function(req, res, next) { }); + router.post('/user_profile/send_message', loggedIn, function(req, res, next) { if (req.user.user_name === req.body.receiver_username) { req.session.messages = {error : 'You cannot send a message to yourself.'}; @@ -333,10 +336,6 @@ router.post('/solution/vote/:examID/:qID/:solID', function(req, res, next){ res.redirect('/solutions/' + examID + '/' + qID); } - - - - }); router.post('/follow_exam/:examID',function (req, res) { @@ -356,6 +355,8 @@ router.post('/follow_exam/:examID',function (req, res) { }); + + module.exports = router; /************** Route protection ********************/ diff --git a/views/layouts/layout.hbs b/views/layouts/layout.hbs index b9895a5..76dddc0 100644 --- a/views/layouts/layout.hbs +++ b/views/layouts/layout.hbs @@ -29,9 +29,16 @@ </head> <body> - {{> header }} + {{# if noHeader}} + {{else}} + {{> header }} + {{/if}} + {{{ body }}} - {{> footer }} + {{# if noHeader}} + {{else}} + {{> footer }} + {{/if}} {{> login }} {{> registration }} </body> diff --git a/views/verification.hbs b/views/verification.hbs new file mode 100644 index 0000000..564af50 --- /dev/null +++ b/views/verification.hbs @@ -0,0 +1,10 @@ +<main id="solutions-main"> + <div class="container"> + <div class="jumbotron text-center"> + <h3><span class="fa fa-lock"></span> Verification</h3> + + <p>Login with:</p> + <a href="/auth/facebook" class="btn btn-primary"><span class="fa fa-facebook"></span> Facebook</a> + </div> + </div> +</main>
\ No newline at end of file |
