Ghost/ghost/session-service
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/session-service module (#35) 2020-04-02 15:26:05 +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/session-service module (#35) 2020-04-02 15:26:05 +02:00
.eslintrc.js Remove trailing commas from .eslintrc.js files 2020-08-04 14:48:07 +01:00
index.js Added @tryghost/session-service module (#35) 2020-04-02 15:26:05 +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/session-service module (#35) 2020-04-02 15:26:05 +02:00

Session Service

Install

npm install @tryghost/session-service --save

or

yarn add @tryghost/session-service

Usage

const SessionService = require('@tryghost/session-service');

const sessionService = SessionService({
    async getSession(req, res) {
        return new Promise((resolve, reject) => {
            require('express-session')(config)(req, res, (err) => {
                if (err) {
                    reject(err);
                }
                resolve(req.session);
            })
        })
    },
    async findUserById({id}) {
        return UserModel.findUserById(id);
    },
    getOriginOfRequest(req) {
        return req.headers.origin;
    }
});

app.use(async (req, res, next) => {
    try {
        const user = await sessionService.getUserForSession(req, res);
        req.user = user;
        next();
    } catch (err) {
        next(err);
    }
});

app.post('/login', async (req, res) => {
    try {
        const user = await UserModel.verify(req.body);
        await sessionService.createSessionForUser(req, res, user);
        res.redirect('/home');
    } catch (err) {
        return next(err);
    }
});

app.post('/logout', async (req, res) => {
   try {
        await sessionService.destroyCurrentSession(req, res);
        res.redirect('/login');
    } catch (err) {
        return next(err);
    }
});

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.

Test

  • yarn types run just type check
  • yarn lint run just eslint
  • yarn test run lint and tests and type check

Copyright & License

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