Skip to content

Commit

Permalink
Merge pull request #92 from haseebzaki-07/new_branch_4
Browse files Browse the repository at this point in the history
Add google login/signup
  • Loading branch information
visheshrwl authored Nov 6, 2024
2 parents 9e3d999 + 4e6e658 commit a3a75d1
Show file tree
Hide file tree
Showing 7 changed files with 232 additions and 4 deletions.
4 changes: 3 additions & 1 deletion backend/.env.example
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
GOOGLE_MAPS_API_KEY=
REDIS_PORT=
REDIS_PORT=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
139 changes: 139 additions & 0 deletions backend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,14 @@
"@types/ioredis": "^5.0.0",
"apollo-server-express": "^3.13.0",
"express": "^4.19.2",
"express-session": "^1.18.1",
"graphql": "^16.8.2",
"graphql-scalars": "^1.23.0",
"helmet": "^8.0.0",
"ioredis": "^5.4.1",
"kafka-node": "^5.0.0",
"passport": "^0.7.0",
"passport-google-oauth20": "^2.0.0",
"pg": "^8.12.0",
"redis": "^4.6.14",
"reflect-metadata": "^0.2.2",
Expand Down
6 changes: 3 additions & 3 deletions backend/src/PaymentController.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// backend/routes/paymentRoutes.js
const express = require('express');
const Stripe = require('stripe');
import express from 'express';
import Stripe from 'stripe';
const router = express.Router();

// Replace with your Stripe secret key
Expand All @@ -24,4 +24,4 @@ router.post('/create-payment-intent', async (req, res) => {
}
});

module.exports = router;
export default router
16 changes: 16 additions & 0 deletions backend/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,26 @@ import { KafkaClient, Producer } from 'kafka-node';
import { UserResolver } from './resolvers/UserResolver';
import { TripResolver } from './resolvers/TripResolver';
import PaymentController from './PaymentController';
import googleAuth from './routes/googleAuth';
import routeService from './services/route'; // Import the route service
import session from 'express-session';
import passport from 'passport';
import './passport'; // Import the passport configuration

const startServer = async () => {
const app = express();
app.use(helmet());
app.use(
session({
secret: 'your-session-secret', // Replace with a secure secret
resave: false,
saveUninitialized: false,
})
);

// Initialize passport and session management
app.use(passport.initialize());
app.use(passport.session());

const schema = await buildSchema({
resolvers: [UserResolver, TripResolver],
Expand All @@ -34,6 +49,7 @@ const startServer = async () => {

app.use("/api/v1", routeService); // Use the imported route service
app.use("/api/v1/payments", PaymentController); // Use the imported route service
app.use('/', googleAuth);


try {
Expand Down
41 changes: 41 additions & 0 deletions backend/src/passport.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import passport from 'passport';
import { Strategy as GoogleStrategy } from 'passport-google-oauth20';
import { User } from './entity/User'; // Adjust the path based on your setup

passport.use(
new GoogleStrategy(
{
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: '/auth/google/callback',
},
async (accessToken, refreshToken, profile, done) => {
try {

let user = await User.findOne({ where: { email: profile.emails[0].value } });


if (!user) {
user = User.create({
name: profile.displayName,
email: profile.emails[0].value,
password: '',
});
await user.save();
}


done(null, user);
} catch (error) {
done(error, null);
}
}
)
);


passport.serializeUser((user, done) => done(null, user.id));
passport.deserializeUser(async (id, done) => {
const user = await User.findOne({ where: { id } });
done(null, user);
});
27 changes: 27 additions & 0 deletions backend/src/routes/googleAuth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import express from 'express';
import passport from 'passport';

const router = express.Router();


router.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] }));


router.get(
'/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
(req, res) => {

res.redirect('/dashboard');
}
);


router.get('/logout', (req, res) => {
req.logout((err) => {
if (err) return next(err);
res.redirect('/');
});
});

export default router;

0 comments on commit a3a75d1

Please sign in to comment.