0.0.7 • Published 4 years ago

koa-easy-auth v0.0.7

Weekly downloads
3
License
MIT
Repository
github
Last release
4 years ago

koa-easy-auth

Easy and simple authentication for Koa.

  • Uses the Authorization header
  • Supports multiple authorization type strategies

Extracted from a personal project in which I required simple, no-nonsense authentication with support for multiple authorization types.

Koa is marked as a peer dependency; you'll need to install Koa yourself.

Install

Versions 0.x.x are considered unstable and may have breaking changes (i.e. does not follow semver). When ready, version 1 will be the first stable release and will follow semver from then on.

npm i koa-easy-auth

Example

See the source code for more specifics.

import Koa from 'koa'
import Authentication from 'koa-simple-auth'
import createError from 'http-errors'

import basicAuth from 'basic-auth'

// optional state interface/type
interface State {
  user: string
}

const app = new Koa()
const auth = new Authentication<State>()

// Add a strategy for the `Basic` authorization type
// NOTE: strategies are NOT middleware, a new strategy for the same type
// will REPLACE the old strategy!
auth.use('Basic', async ctx => {
  const credentials = basicAuth(ctx.req)
  
  // usually we'd do some checking here to see
  // if the supplied user name and password are correct
  if (credentials.pass !== 'secret') {
    throw createError(401, 'Invalid password')
  }
  
  // now we can update the state
  ctx.state.user = credentials.user
  
  // optional strategy parameters, are exposed in the WWW-Authenticate header
}, { realm: 'my-realm', charset: 'UTF-8' })

// Add a second strategy
auth.use('Token', async ctx => {
  const token = ctx.req.headers.authorization.split(' ')[1]
  
  if (token !== 'token') {
    throw createError(401, 'Invalid token')
  }
  
  // get user name somehow
  ctx.state.user = 'me'
})

// add the middleware for the `Basic` strategy only
app.use(auth.middleware('Basic'))

app.use(async ctx => {
  const { state } = ctx
  const { user } = state
  
  ctx.body = `Hello, you are ${user}!`
})

app.listen(3000)

License

Copyright 2020 Michiel van der Velde.

This software is licensed under the MIT License.

0.0.7

4 years ago

0.0.6

4 years ago

0.0.5

4 years ago

0.0.3

4 years ago

0.0.4

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago