Ghost/ghost/mw-session-from-token
Naz 2ef3626123 Added newly generated TypeScript definiton files
no issue

- These files kept generating a new ouput when trying to publish an unrelated package. Assuming the generation is orrect and commiting this just to get things out of the way (type definition files should not break any functionality)
2021-04-07 13:41:49 +12:00
..
lib Added @tryghost/mw-session-from-token module (#32) 2020-04-05 15:58:33 +02:00
test Remove trailing commas from .eslintrc.js files 2020-08-04 14:48:07 +01:00
types Added newly generated TypeScript definiton files 2021-04-07 13:41:49 +12:00
.eslintignore Added @tryghost/mw-session-from-token module (#32) 2020-04-05 15:58:33 +02:00
.eslintrc.js Remove trailing commas from .eslintrc.js files 2020-08-04 14:48:07 +01:00
index.js Added @tryghost/mw-session-from-token module (#32) 2020-04-05 15:58:33 +02:00
LICENSE 2021 2021-01-25 16:20:43 +00:00
package.json Update dependency sinon to v10 2021-04-02 01:16:56 +00:00
README.md 2021 2021-01-25 16:20:43 +00:00
tsconfig.json Added @tryghost/mw-session-from-token module (#32) 2020-04-05 15:58:33 +02:00

Session From Token Middleware

Middleware to handle generating sessions from tokens, for example like with magic links, or SSO flows similar to SAML.

Install

npm install @tryghost/mw-session-from-token --save

or

yarn add @tryghost/mw-session-from-token

Usage

const sessionFromTokenMiddleware = require('@tryghost/mw-session-from-token')({
    callNextWithError: true,
    async createSession(req, res, user) {
        req.session.user_id = user.id;
    },
    async getTokenFromRequest(res) {
        return req.headers['some-cool-header'];
    },
    async getLookupFromToken(token) {
        await someTokenService.validate(token);
        const data = await someTokenService.getData(token);
        return data.email;
    },
    async findUserByLookup(lookup) {
        return await someUserModel.findOne({email: lookup});
    }
});

someExpressApp.get('/some/sso/url', someSessionMiddleware, sessionFromTokenMiddleware, (req, res, next) => {
    res.redirect('/loggedin');
}, (err, res, res, next) => {
    res.redirect('/error');
});

Develop

This is a mono repository, managed with lerna.

Follow the instructions for the top-level repo.

  1. git clone this repo & cd into it as usual
  2. Run yarn to install top-level dependencies.

Run

  • yarn dev

Test

  • yarn lint run just eslint
  • yarn test run lint and tests

Copyright & License

Copyright (c) 2013-2021 Ghost Foundation - Released under the MIT license.