From f2c1b270677669f3859e9c9e8e607559e613b314 Mon Sep 17 00:00:00 2001 From: Arshit Chaurasia Date: Thu, 16 Jan 2025 00:03:33 +0530 Subject: [PATCH] feat(backend) : Add signin with github --- backend/config/passportConfig.js | 12 ++++++++++++ backend/package.json | 1 + backend/routes/auth.js | 14 ++++++++++++++ src/pages/Auth/Login.tsx | 6 +++--- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/backend/config/passportConfig.js b/backend/config/passportConfig.js index 842f50c..9767f2e 100644 --- a/backend/config/passportConfig.js +++ b/backend/config/passportConfig.js @@ -1,6 +1,8 @@ const passport = require("passport"); const LocalStrategy = require('passport-local').Strategy; const User = require("../models/User"); +const GitHubStrategy = require('passport-github2').Strategy; + passport.use( new LocalStrategy( @@ -29,6 +31,16 @@ passport.use( ) ); +passport.use(new GitHubStrategy({ + clientID: process.env.GITHUB_CLIENT_ID, + clientSecret: process.env.GITHUB_CLIENT_SECRET, + callbackURL: process.env.GITHUB_CALLBACK_URL, + }, + function(accessToken, refreshToken, profile, cb) { + return cb(null, profile); + } +)); + // Serialize user (store user info in session) passport.serializeUser((user, done) => { done(null, user.id); diff --git a/backend/package.json b/backend/package.json index 7d9c828..ec2b1c5 100644 --- a/backend/package.json +++ b/backend/package.json @@ -18,6 +18,7 @@ "express-session": "^1.18.1", "mongoose": "^8.8.2", "passport": "^0.7.0", + "passport-github2": "^0.1.12", "passport-local": "^1.0.0" }, "devDependencies": { diff --git a/backend/routes/auth.js b/backend/routes/auth.js index e26c7a9..1570634 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -39,4 +39,18 @@ router.get("/logout", (req, res) => { }); }); +// Sign-in with Github routes +router.get('/github', passport.authenticate('github', { scope: ['user:email'] })); + +router.get('/github/callback', + passport.authenticate('github', { failureRedirect: 'api/auth/github/error' }), + (req, res) => { + res.redirect(`${process.env.CORS_ORIGIN}/home`); + } +); + +router.get('/github/error', (req, res) => { + res.redirect(`${process.env.CORS_ORIGIN}/login`); +}); + module.exports = router; diff --git a/src/pages/Auth/Login.tsx b/src/pages/Auth/Login.tsx index 6e23fab..d09e351 100644 --- a/src/pages/Auth/Login.tsx +++ b/src/pages/Auth/Login.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; import { TextField, Button, @@ -39,8 +39,8 @@ const Login: React.FC = () => { } }; - const handleGithubLogin = () => { - console.log("GitHub login"); + const handleGithubLogin = async () => { + window.location.href = `${import.meta.env.VITE_API_URL}/auth/github`; }; return (