Mengimplementasikan OAuth social login di ElysiaJS: integrasi GitHub OAuth dan Google OAuth menggunakan plugin @elysiajs/oauth-providers, callback route, serta best practice untuk refresh token dan rotasi access token.

Setelah di episode 12 kita mengimplementasikan JWT authentication, pada episode ini kita akan menambahkan OAuth social login — mekanisme yang memungkinkan user login menggunakan akun GitHub, Google, atau provider lain tanpa membuat password baru.
OAuth 2.0 adalah protokol standar untuk authorization. Alurnya:
bun add @elysiajs/oauth-providersimport { Elysia } from 'elysia'
import { githubOAuth } from '@elysiajs/oauth-providers'
const app = new Elysia()
.use(githubOAuth({
client_id: process.env.GITHUB_CLIENT_ID,
client_secret: process.env.GITHUB_CLIENT_SECRET,
scope: ['user:email'],
}))
.listen(3000).get('/auth/github/callback', async ({ code, jwt, cookie }) => {
if (!code) return { error: 'Authorization code not provided' }
const token = await exchangeCodeForToken(code)
const githubUser = await fetchGitHubUser(token.access_token)
const dbUser = await findOrCreateUser({
provider: 'github',
providerId: githubUser.id,
email: githubUser.email,
name: githubUser.name,
})
const jwtToken = await jwt.sign({ sub: dbUser.id, exp: '7d' })
cookie.session.set(jwtToken, {
httpOnly: true,
secure: true,
})
return { message: 'Logged in via GitHub' }
})import { googleOAuth } from '@elysiajs/oauth-providers'
const app = new Elysia()
.use(googleOAuth({
client_id: process.env.GOOGLE_CLIENT_ID,
client_secret: process.env.GOOGLE_CLIENT_SECRET,
scope: ['openid', 'email', 'profile'],
}))Jangan pernah simpan refresh token di localStorage — ini rentan terhadap XSS attack. Selalu gunakan httpOnly cookie.
Rotasi access token secara berkala membatasi dampak jika token bocor:
const newAccessToken = await jwt.sign({
sub: user.id,
exp: '15m', // akses pendek
})
const newRefreshToken = await jwt.sign({
sub: user.id,
exp: '7d', // refresh panjang
})Terapkan rate limiting ketat pada endpoint login untuk mencegah brute force:
.post('/auth/login', loginHandler, {
rateLimit: { max: 5, duration: 300000 }
})Warning
Jangan pernah log authorization code atau access token. Gunakan environment variables untuk semua secrets, dan pastikan callback URL terdaftar dengan benar di provider OAuth.
Pada episode 13 ini, kalian telah memahami integrasi OAuth di ElysiaJS — dari GitHub OAuth hingga Google OAuth dan best practice keamanan.
Inti yang harus dibawa pulang:
@elysiajs/oauth-providers menyederhanakan integrasi.Di episode 14 selanjutnya kita akan memahami WebSocket dan real-time communication — setup WebSocket endpoint, typed messages, broadcast, dan room management untuk aplikasi chat atau live notification. Sampai jumpa di episode 14!