From 29bc241cf6ec55322b3c704b1e06381c99c62108 Mon Sep 17 00:00:00 2001 From: Rish Date: Mon, 20 Apr 2020 11:33:15 +0530 Subject: [PATCH] Exposed member session data on site refs https://github.com/TryGhost/members.js/issues/6 This exposes an endpoint on site url (`/members/ssr/member`) to get member's data in exchange for their session/identity on a theme when they are logged in. It essentially uses the same logic and data which is passed down to theme through handlebar helpers, and is used by members.js script to load member data. --- core/server/services/members/middleware.js | 27 ++++++++++++++++++++++ core/server/web/site/app.js | 1 + 2 files changed, 28 insertions(+) diff --git a/core/server/services/members/middleware.js b/core/server/services/members/middleware.js index 670bed042a..1909c6938e 100644 --- a/core/server/services/members/middleware.js +++ b/core/server/services/members/middleware.js @@ -42,6 +42,32 @@ const getMemberDataFromSession = async function (req, res, next) { } }; +const getMemberData = async function (req, res) { + if (!labsService.isSet('members')) { + res.json(null); + } + try { + const member = await membersService.ssr.getMemberDataFromSession(req, res); + if (member) { + res.json({ + uuid: member.uuid, + email: member.email, + name: member.name, + firstname: member.name && req.member.name.split(' ')[0], + avatar_image: member.avatar_image, + subscriptions: member.stripe.subscriptions, + paid: member.stripe.subscriptions.length !== 0 + }); + } else { + res.json(null); + } + } catch (err) { + common.logging.warn(err.message); + res.writeHead(err.statusCode); + res.end(err.message); + } +}; + const exchangeTokenForSession = async function (req, res, next) { if (!labsService.isSet('members')) { return next(); @@ -76,6 +102,7 @@ module.exports = { decorateResponse ], getIdentityToken, + getMemberData, deleteSession, stripeWebhooks: (req, res, next) => membersService.api.middleware.handleStripeWebhook(req, res, next) }; diff --git a/core/server/web/site/app.js b/core/server/web/site/app.js index 554fa24ac5..ecc10203a2 100644 --- a/core/server/web/site/app.js +++ b/core/server/web/site/app.js @@ -139,6 +139,7 @@ module.exports = function setupSiteApp(options = {}) { // Members middleware // Initializes members specific routes as well as assigns members specific data to the req/res objects + siteApp.get('/members/ssr/member', shared.middlewares.labs.members, membersMiddleware.getMemberData); siteApp.get('/members/ssr', shared.middlewares.labs.members, membersMiddleware.getIdentityToken); siteApp.delete('/members/ssr', shared.middlewares.labs.members, membersMiddleware.deleteSession); siteApp.post('/members/webhooks/stripe', shared.middlewares.labs.members, membersMiddleware.stripeWebhooks);