Day 85

OAuth 2.0

12 min
JavaScript 100 Days

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-flow.js
javascript
// 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.