LoginSignup
5
3

More than 5 years have passed since last update.

koa+passportでGitHub認証

Posted at

KoaでGitHubのAccessTokenが欲しくなって調べてやってみたのでメモ。
PassportGitHubStrategyを使えば簡単。

passportの設定

認証に必要な情報をStrategyを通してセットアップする。

passportはexpress準拠に作られているが、koa-passportがexpressのAPIとの互換性を保持してくれるのでそいつを使う。
scopeについては本家を参照。

passport.ts
import passport from 'koa-passport'
import { Strategy } from 'passport-github'

passport.use(new Strategy({
  clientID:     process.env.GITHUB_OAUTH_CLIENT_ID,
  clientSecret: process.env.GITHUB_OAUTH_CLIENT_SECRET,
  callbackUrl: 'http://localhost:3000/auth/github/callback',
  scope: ['repo'],
}, (accessToken, refreshToken, profile, cb) => {
  cb(null, { accessToke }) // XXX ここでユーザ認証を行う
})

// sessionにつっこむようにシリアライズする
passport.serializeUser(function (user, done) {
  done(null, user)
})

// sessionから取り出すときにデシリアライズする
passport.deserializeUser(function (user, done) {
  done(null, user)
})

export default passport

koa-passportでもpassportと同様に扱える。

認証用のルーティング設定

ドキュメントからほぼコピペでいい。

router.ts
import Router from 'koa-router'
import passport from './passport'

const router = new Router()

router.get('/auth/github', passport.authenticate('github'))
router.get('/auth/github/callback', passport.authenticate('github', {
  successRedirect: '/',
  failureRedirect: '/auth/github/failled',
}))

koaでpassportを有効化

app.ts
import Koa from 'koa'
import logger from 'koa-logger'
import bodyParser from 'koa-bodyparser'
import session from 'koa-session'

import router from './router'
import paspport from './passport'

const app = new Koa()

app.use(logger())
app.use(bodyParser())

app.keys = ['secret'[
app.use(session({}, app))

app.use(passport.initialize())
app.use(passport.session())

app.use(router.routes())
app.use(router.allowedMethods())

app.listen(3000)

まとめ

  • passportを使うと簡単にOAuthできる
  • koaでもpassportできる
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3