Ghost/ghost/mw-session-from-token
Daniel Lockyer 54aa9f016b Fixed full Admin test suite running during unit tests
- because of how the npm scripts were set up, we were running the full
  Admin integration tests during the unit tests phase of CI
- this commit renames the majority of `test` to `test:unit` in the
  package.json files, and aliases `test` to `test:unit`
- special packages like Admin have no-op'd `test:unit` scripts so we
  don't end up running its tests
2022-08-15 15:34:52 +02:00
..
lib Added @tryghost/mw-session-from-token module (#32) 2020-04-05 15:58:33 +02:00
test Updated Eslint ECMAScript compatibility to 2022 2022-08-09 15:51:40 +02: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
package.json Fixed full Admin test suite running during unit tests 2022-08-15 15:34:52 +02:00
README.md Tidied up package README and LICENSE files 2022-07-26 15:22:10 +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.

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');
});