├── .gitignore ├── .env ├── src ├── controllers │ └── authController.js ├── server.js ├── routes │ └── authRoutes.js └── config │ └── passportConfig.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | GOOGLE_CLIENT_ID=90574655086-gc7oa2q230db88epo5ds5ht8lauovpvf.apps.googleusercontent.com 2 | GOOGLE_CLIENT_SECRET=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 3 | FACEBOOK_CLIENT_ID=1782883102474623 4 | FACEBOOK_CLIENT_SECRET=25b97a1456ce311520a122a22b87280e 5 | URL_REDIRECT="http://localhost:5173/" -------------------------------------------------------------------------------- /src/controllers/authController.js: -------------------------------------------------------------------------------- 1 | const passport = require('passport'); 2 | 3 | exports.googleAuth = passport.authenticate('google', { scope: ['profile', 'email']}); 4 | exports.googleAuthCallback = passport.authenticate('google', {failureRedirect: '/'}); 5 | 6 | 7 | exports.facebookAuth = passport.authenticate('facebook', { scope: ['email']}); 8 | exports.facebookAuthCallback = passport.authenticate('facebook', {failureRedirect: '/'}); 9 | 10 | exports.redirectHome = (req, res) => { 11 | res.redirect(process.env.URL_REDIRECT); 12 | }; -------------------------------------------------------------------------------- /src/server.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const express = require('express'); 3 | const session = require('express-session'); 4 | const passport = require('./config/passportConfig'); 5 | const authRoutes = require('./routes/authRoutes'); 6 | 7 | const app = express(); 8 | 9 | app.use(session({ 10 | secret: '123456', 11 | resave:false, 12 | saveUninitialized:true 13 | })); 14 | 15 | 16 | app.use(passport.initialize()); 17 | app.use(passport.session()); 18 | app.use(authRoutes); 19 | 20 | app.listen(3000, () => { 21 | console.log("Aplicacion corriendo por el puerto 3000"); 22 | }); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "oauth2", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "dev": "nodemon src/server.js" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "cors": "^2.8.5", 15 | "dotenv": "^16.4.5", 16 | "express": "^4.21.1", 17 | "express-session": "^1.18.1", 18 | "nodemon": "^3.1.7", 19 | "passport": "^0.7.0", 20 | "passport-facebook": "^3.0.0", 21 | "passport-google-oauth20": "^2.0.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/routes/authRoutes.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | const authController = require('../controllers/authController'); 4 | 5 | router.get('/auth/google', authController.googleAuth); //mostrar la pantalla de Autorizar y Denegar de Google 6 | router.get('/auth/google/callback', authController.googleAuthCallback, authController.redirectHome); 7 | 8 | router.get('/auth/facebook', authController.facebookAuth); //mostrar la pantalla de Autorizar y Denegar de Facebook 9 | router.get('/auth/facebook/callback', authController.facebookAuthCallback, authController.redirectHome); 10 | 11 | module.exports = router; -------------------------------------------------------------------------------- /src/config/passportConfig.js: -------------------------------------------------------------------------------- 1 | const passport = require('passport'); 2 | const GoogleStrategy = require('passport-google-oauth20'); 3 | const FacebookStrategy = require('passport-facebook'); 4 | 5 | passport.use(new GoogleStrategy({ 6 | clientID: process.env.GOOGLE_CLIENT_ID, 7 | clientSecret: process.env.GOOGLE_CLIENT_SECRET, 8 | callbackURL: 'http://localhost:3000/auth/google/callback' 9 | }, function(accessToken, refreshToken, profile, cb){ 10 | return cb(null,profile); 11 | })); 12 | 13 | passport.use(new FacebookStrategy({ 14 | clientID: process.env.FACEBOOK_CLIENT_ID, 15 | clientSecret: process.env.FACEBOOK_CLIENT_SECRET, 16 | callbackURL: 'http://localhost:3000/auth/facebook/callback', 17 | profileFields: ['id', 'displayName', 'emails'] 18 | 19 | }, function(accessToken, refreshToken, profile, cb){ 20 | return cb(null,profile); 21 | })); 22 | 23 | 24 | passport.serializeUser((user, done) => { 25 | done(null, user); 26 | }); 27 | 28 | passport.deserializeUser((obj, done) => { 29 | done(null, obj); 30 | }); 31 | 32 | module.exports = passport; --------------------------------------------------------------------------------