Day 85 OAuth 2.0
OAuth 2.0 standard hai jo users ko Google, GitHub, Facebook se login karne deta hai. 'Login with Google' — sab OAuth 2.0 use karta hai. Passport.js Node.js mein OAuth easy karta hai.
OAuth 2.0 Flow
Authorization code flow samjho.
// OAuth 2.0 Flow:
// 1. User clicks "Login with Google"
// 2. App redirects to Google with client_id
// 3. User grants permission on Google
// 4. Google redirects back with "code"
// 5. App exchanges code for access_token
// 6. App uses token to get user info
// Passport.js with Google
// npm install passport passport-google-oauth20
const passport = require("passport");
const GoogleStrategy = require("passport-google-oauth20").Strategy;
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: "http://localhost:3000/auth/google/callback"
}, async (accessToken, refreshToken, profile, done) => {
// User database mein find ya create karo
let user = await User.findOne({ googleId: profile.id });
if (!user) {
user = await User.create({
googleId: profile.id,
name: profile.displayName,
email: profile.emails[0].value,
avatar: profile.photos[0].value
});
}
done(null, user);
}));
// Routes
app.get("/auth/google",
passport.authenticate("google", { scope: ["profile", "email"] })
);
app.get("/auth/google/callback",
passport.authenticate("google", { failureRedirect: "/login" }),
(req, res) => res.redirect("/dashboard")
);
🎯 Practice Challenge
GitHub OAuth login implement karo. User profile GitHub se fetch karo — name, avatar, bio.