From ddaf9eedbee5ff67925da11e85e540702f2574df Mon Sep 17 00:00:00 2001 From: daregoodness1997 Date: Mon, 4 Jul 2022 19:57:21 +0100 Subject: [PATCH 1/3] added email scope --- app.js | 5 +++++ config/passport.js | 4 +++- controller/auth.js | 2 +- routes/auth.js | 4 +++- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index 3669690..2c65afc 100644 --- a/app.js +++ b/app.js @@ -57,6 +57,11 @@ if (process.env.NODE_ENV === 'development') { app.use(morgan('dev')); } +// All +app.all('/*', function (req, res, next) { + res.header('Access-Control-Allow-Origin', '*'); + next(); +}); // routes app.get('/', (req, res) => { diff --git a/config/passport.js b/config/passport.js index 4d385b0..24a679b 100644 --- a/config/passport.js +++ b/config/passport.js @@ -12,13 +12,15 @@ module.exports = function (passport) { callbackURL: '/api/v1/auth/google/callback', }, async (accessToken, refreshToken, profile, done) => { - console.log(profile); + // console.log(profile); + // console.log('email', profile.emails[0].value); const newUser = { googleId: profile.id, displayName: profile.displayName, firstName: profile.name.givenName, lastName: profile.name.familyName, image: profile.photos[0].value, + email: profile.emails[0].value, }; try { diff --git a/controller/auth.js b/controller/auth.js index 3c580b3..3ced062 100644 --- a/controller/auth.js +++ b/controller/auth.js @@ -6,7 +6,7 @@ const loginUser = async (req, res) => { }; const googleLogin = async (req, res) => { - passport.authenticate('google', { scope: ['profile'] }); + passport.authenticate('google', { scope: ['eamil', 'profile'] }); }; const googleCallback = async (req, res, next) => { diff --git a/routes/auth.js b/routes/auth.js index 16aa617..b118036 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -12,7 +12,9 @@ router.route('/register').post(registerUser); router .route('/google') - .get(passport.authenticate('google', { scope: ['profile'] })); + .get( + passport.authenticate('google', { scope: ['openid ', 'email', 'profile'] }) + ); router .route('/google/callback') .get( From 760aaef0777f928f48cacd60e0621ebdc6d5854b Mon Sep 17 00:00:00 2001 From: daregoodness1997 Date: Tue, 5 Jul 2022 18:38:31 +0100 Subject: [PATCH 2/3] typo errors --- config/passport.js | 1 + controller/auth.js | 2 +- package-lock.json | 55 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/config/passport.js b/config/passport.js index 24a679b..e7e6547 100644 --- a/config/passport.js +++ b/config/passport.js @@ -10,6 +10,7 @@ module.exports = function (passport) { clientID: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, callbackURL: '/api/v1/auth/google/callback', + proxy: true, }, async (accessToken, refreshToken, profile, done) => { // console.log(profile); diff --git a/controller/auth.js b/controller/auth.js index 3ced062..e49a564 100644 --- a/controller/auth.js +++ b/controller/auth.js @@ -6,7 +6,7 @@ const loginUser = async (req, res) => { }; const googleLogin = async (req, res) => { - passport.authenticate('google', { scope: ['eamil', 'profile'] }); + passport.authenticate('google', { scope: ['email', 'profile'] }); }; const googleCallback = async (req, res, next) => { diff --git a/package-lock.json b/package-lock.json index fd6475b..12b0b62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "morgan": "^1.10.0", "passport": "^0.6.0", "passport-google-oauth20": "^2.0.0", + "passport-twitter-oauth2": "^2.1.1", "rate-limiter": "^0.2.0", "xss-clean": "^0.1.1" }, @@ -1931,6 +1932,18 @@ "node": ">= 0.4.0" } }, + "node_modules/passport-twitter-oauth2": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/passport-twitter-oauth2/-/passport-twitter-oauth2-2.1.1.tgz", + "integrity": "sha512-wkJLfsms4xIS5MO9IK243rJI9cASJBma9CYJAnVf0alj4blp/wykeQrr0i0HgBwrtAiJUN/nqx3P9rzwS5ytAQ==", + "dependencies": { + "passport-oauth2": "1.x.x", + "xtraverse": "0.1.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -2681,6 +2694,15 @@ "node": ">=8" } }, + "node_modules/xmldom": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", + "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", + "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0", + "engines": { + "node": ">=0.1" + } + }, "node_modules/xss-clean": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/xss-clean/-/xss-clean-0.1.1.tgz", @@ -2694,6 +2716,17 @@ "resolved": "https://registry.npmjs.org/xss-filters/-/xss-filters-1.2.6.tgz", "integrity": "sha512-uqgwZRpVJCDfHsRX9lDrkPyCitQYzPklmLSbajJncATZKAUd1tF1x9y2VyPNFMv8SsSWed80xorSS5qGpw3WiA==" }, + "node_modules/xtraverse": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/xtraverse/-/xtraverse-0.1.0.tgz", + "integrity": "sha512-MANQdlG2hl1nQobxz1Rv8hsS1RuBS0C1N6qTOupv+9vmfrReePdxhmB2ecYjvsp4stJ80HD7erjkoF1Hd/FK9A==", + "dependencies": { + "xmldom": "0.1.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -4132,6 +4165,15 @@ "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==" }, + "passport-twitter-oauth2": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/passport-twitter-oauth2/-/passport-twitter-oauth2-2.1.1.tgz", + "integrity": "sha512-wkJLfsms4xIS5MO9IK243rJI9cASJBma9CYJAnVf0alj4blp/wykeQrr0i0HgBwrtAiJUN/nqx3P9rzwS5ytAQ==", + "requires": { + "passport-oauth2": "1.x.x", + "xtraverse": "0.1.x" + } + }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -4693,6 +4735,11 @@ "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, + "xmldom": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", + "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==" + }, "xss-clean": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/xss-clean/-/xss-clean-0.1.1.tgz", @@ -4706,6 +4753,14 @@ "resolved": "https://registry.npmjs.org/xss-filters/-/xss-filters-1.2.6.tgz", "integrity": "sha512-uqgwZRpVJCDfHsRX9lDrkPyCitQYzPklmLSbajJncATZKAUd1tF1x9y2VyPNFMv8SsSWed80xorSS5qGpw3WiA==" }, + "xtraverse": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/xtraverse/-/xtraverse-0.1.0.tgz", + "integrity": "sha512-MANQdlG2hl1nQobxz1Rv8hsS1RuBS0C1N6qTOupv+9vmfrReePdxhmB2ecYjvsp4stJ80HD7erjkoF1Hd/FK9A==", + "requires": { + "xmldom": "0.1.x" + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index 1d237f8..4ffc656 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "morgan": "^1.10.0", "passport": "^0.6.0", "passport-google-oauth20": "^2.0.0", + "passport-twitter-oauth2": "^2.1.1", "rate-limiter": "^0.2.0", "xss-clean": "^0.1.1" }, From f493450b8a67a038c6888a3ccfded79f5cf89509 Mon Sep 17 00:00:00 2001 From: daregoodness1997 Date: Tue, 5 Jul 2022 20:01:12 +0100 Subject: [PATCH 3/3] req user implemented --- controller/auth.js | 27 ++++++++++++++++++++++----- controller/dashboard.js | 4 ++++ routes/auth.js | 29 ++++++++++++++++++++--------- 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/controller/auth.js b/controller/auth.js index e49a564..f30a867 100644 --- a/controller/auth.js +++ b/controller/auth.js @@ -2,13 +2,20 @@ const passport = require('passport'); const User = require('../models/Users'); const loginUser = async (req, res) => { - res.json('User logged in'); + res.json({ msg: 'User Authenticated', user: req.user }); }; const googleLogin = async (req, res) => { passport.authenticate('google', { scope: ['email', 'profile'] }); }; +const googleLoginSuccess = async (req, res) => { + if (!req.user) { + res.status(400).json({ msg: 'User Not Authenticated', user: null }); + } + res.json({ msg: 'User Authenticated', user: req.user }); +}; + const googleCallback = async (req, res, next) => { passport.authenticate('google', { failureRedirect: '/' }); next(); @@ -18,9 +25,19 @@ const registerUser = async (req, res) => { res.status(200).json({ user }); }; -const logoutUser = async (req, res) => { - req.logout(); - res.redirect('/'); +const logoutUser = async (req, res, next) => { + req.logout(function (err) { + if (err) { + return next(err); + } + res.redirect('/'); + }); }; -module.exports = { loginUser, logoutUser, registerUser, googleLogin }; +module.exports = { + loginUser, + logoutUser, + registerUser, + googleLogin, + googleLoginSuccess, +}; diff --git a/controller/dashboard.js b/controller/dashboard.js index 7882a92..732729a 100644 --- a/controller/dashboard.js +++ b/controller/dashboard.js @@ -1,4 +1,8 @@ const dashboard = async (req, res) => { + if (!req.user) { + res.status(400).json({ msg: 'User Not Authenticated', user: null }); + } + res.json({ msg: 'User Authenticated', user: req.user }); res.send('Dashboard'); }; diff --git a/routes/auth.js b/routes/auth.js index b118036..4ddc6c7 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -1,10 +1,17 @@ const express = require('express'); const router = express.Router(); const passport = require('passport'); -const { loginUser, registerUser, logoutUser } = require('../controller/auth'); +const { + loginUser, + registerUser, + logoutUser, + googleLoginSuccess, +} = require('../controller/auth'); const { ensureGuest } = require('../middleware/authentication'); router.route('/login').get(ensureGuest, loginUser); +router.route('/login/success').get(googleLoginSuccess); + router.route('/register').post(registerUser); // @desc Auth with Google @@ -15,14 +22,18 @@ router .get( passport.authenticate('google', { scope: ['openid ', 'email', 'profile'] }) ); -router - .route('/google/callback') - .get( - passport.authenticate('google', { failureRedirect: '/' }), - (req, res) => { - res.redirect('/api/v1/dashboard'); - } - ); + +router.route('/google/callback').get( + passport.authenticate('google', { + failureRedirect: '/', + // successRedirect: '/dashboard', + }), + async (req, res) => { + res.redirect('http://localhost:3000/dashboard'); + + res.status(200).json(req.user).then(); + } +); //@desc logout user // @route /auth/logout