Package Exports
- koa-csrf
- koa-csrf/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (koa-csrf) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
koa-csrf
CSRF tokens for Koa
Table of Contents
Install
npm:
npm install koa-csrfUsage
Add middleware in Koa app (default options are shown):
const Koa = require('koa'); const bodyParser = require('koa-bodyparser'); const session = require('koa-generic-session'); const convert = require('koa-convert'); const CSRF = require('koa-csrf'); const app = new Koa(); // set the session keys app.keys = [ 'a', 'b' ]; // add session support app.use(convert(session())); // add body parsing app.use(bodyParser()); // add the CSRF middleware app.use(new CSRF({ invalidTokenMessage: 'Invalid CSRF token', invalidTokenStatusCode: 403, excludedMethods: [ 'GET', 'HEAD', 'OPTIONS' ], disableQuery: false })); // your middleware here (e.g. parse a form submit) app.use((ctx, next) => { if (![ 'GET', 'POST' ].includes(ctx.method)) return next(); if (ctx.method === 'GET') { ctx.body = ctx.csrf; return; } ctx.body = 'OK'; }); app.listen();
Add the CSRF token in your template forms:
Jade Template:
form(action='/register', method='POST') input(type='hidden', name='_csrf', value=csrf) input(type='email', name='email', placeholder='Email') input(type='password', name='password', placeholder='Password') button(type='submit') RegisterEJS Template:
<form action="/register" method="POST"> <input type="hidden" name="_csrf" value="<%= csrf %>" /> <input type="email" name="email" placeholder="Email" /> <input type="password" name="password" placeholder="Password" /> <button type="submit">Register</button> </form>
Options
invalidTokenMessage(String or Function) - defaults toInvalid CSRF token, but can also be a function that accepts one argumentctx(useful for i18n translation, e.g. usingctx.request.t('some message')via @ladjs/i18ninvalidTokenStatusCode(Number) - defaults to403excludedMethods(Array) - defaults to[ 'GET', 'HEAD', 'OPTIONS' ]disableQuery(Boolean) - defaults tofalse
Open Source Contributor Requests
- Existing methods from 1.x package added to 3.x
- Existing tests from 1.x package added to 3.x
Contributors
| Name | Website |
|---|---|
| Nick Baugh | https://github.com/niftylettuce |
| Imed Jaberi | https://www.3imed-jaberi.com/ |