google.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. const express = require('express');
  2. const router = express.Router();
  3. const jwt = require('jsonwebtoken');
  4. const { Email } = require('../models/email.model');
  5. const { User } = require('../models/user.model');
  6. const nodemailer = require('nodemailer');
  7. const role = require('../lib/role');
  8. const config = require('../config/config.json');
  9. //require('dotenv').config();
  10. const passport = require('passport');
  11. const GoogleStrategy = require('passport-google-oauth20').Strategy;
  12. router.use(passport.initialize());
  13. router.use(passport.session());
  14. passport.serializeUser((user, cb) => {
  15. cb(null, user);
  16. });
  17. passport.deserializeUser((obj, cb) => {
  18. cb(null, obj);
  19. });
  20. // passport.use(new GoogleStrategy({
  21. // clientID: "493465923713-qrbgtq8d53iguine1gf928483mn4odes.apps.googleusercontent.com",
  22. // clientSecret: "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",
  23. // callbackURL: "http://localhost:4000/api/auth/google/callback"
  24. // },
  25. // async (accessToken, refreshToken, profile, done) => {
  26. // console.log(profile.emails[0].value)
  27. // return done(null, profile);
  28. // var email = profile.emails[0].value
  29. // const user = await User.findOne({email: email})
  30. // if (user) {
  31. // console.log(user)
  32. // user.username = accessToken;
  33. // user.save().then(()=>{
  34. // return done(null, user);
  35. // })
  36. // }else{
  37. // console.log('creation of user')
  38. // //make a new record
  39. // let user = await new User({
  40. // googleId: profile.id,
  41. // email: profile.emails[0].value,
  42. // accessToken : accessToken,
  43. // refreshToken : refreshToken
  44. // }).save()
  45. // done(null, user);
  46. // }
  47. // console.log('acces token ',accessToken);
  48. // console.log('refresh token ',refreshToken);
  49. // console.log('prfile ',profile.emails[0].value);
  50. // console.log('done ',done);
  51. // }
  52. // ));
  53. passport.use(new GoogleStrategy({
  54. clientID: "493465923713-qrbgtq8d53iguine1gf928483mn4odes.apps.googleusercontent.com",
  55. clientSecret: "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",
  56. callbackURL: "http://localhost:4000/api/auth/google/callback"
  57. },
  58. async (req, accessToken, refreshToken, profile, cb) => {
  59. User.findOne({ email: profile.emails[0].value }, (err, user) => {
  60. if (err) {
  61. cb(err); // handle errors!
  62. }
  63. if (!err && user !== null) {
  64. cb(err, user);
  65. }
  66. else {
  67. console.log('acces token ',accessToken);
  68. user = new User({
  69. googleId: profile.id,
  70. email: profile.emails[0].value,
  71. firstname: profile.name.givenName,
  72. lastname: profile.name.familyName,
  73. role: role.Client,
  74. isActive: true,
  75. isGain: false,
  76. });
  77. user.save((err) => {
  78. if (err) {
  79. cb(err); // handle errors!
  80. } else {
  81. cb(null, user);
  82. }
  83. });
  84. }
  85. });
  86. }
  87. ));
  88. router.get('/', passport.authenticate('google', { session: false, scope: ['profile', 'email'] }),
  89. async () => {
  90. console.log('je suis dans mon get root')
  91. });
  92. // router.get('/callback', passport.authenticate('google') )
  93. router.get('/callback', passport.authenticate('google', { failureRedirect: '/failed' }),
  94. async (req, res) => {
  95. console.log('je susi dans ma fonction callback ', req.user)
  96. const token = jwt.sign({ userId: req.user._id, email: req.user.email, role: req.user.role }, config.secret_key, { expiresIn: '10 h' })
  97. // Return the JWT token as JSON data
  98. res.json({ token });
  99. });
  100. //failed auth google
  101. router.get('/failed', async (req, res) => { res.status(404).send('erreur authentification') })
  102. //get all users
  103. router.get('/users', async (req, res) => {
  104. res.json(req.user);
  105. })
  106. module.exports = router;