@zeushq/nextjs-zidentity
Version:
Next.js SDK for signin in with Zeus Identity
60 lines • 2.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var url_1 = (0, tslib_1.__importDefault)(require("url"));
var url_join_1 = (0, tslib_1.__importDefault)(require("url-join"));
var debug_1 = (0, tslib_1.__importDefault)(require("../utils/debug"));
var debug = (0, debug_1.default)('logout');
function logoutHandlerFactory(config, getClient, sessionCache) {
var _this = this;
return function (req, res, options) {
if (options === void 0) { options = {}; }
return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
var returnURL, idToken, client;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
returnURL = options.returnTo || config.routes.postLogoutRedirect;
debug('logout() with return url: %s', returnURL);
if (url_1.default.parse(returnURL).host === null) {
returnURL = (0, url_join_1.default)(config.baseURL, returnURL);
}
if (!sessionCache.isAuthenticated(req, res)) {
debug('end-user already logged out, redirecting to %s', returnURL);
res.writeHead(302, {
Location: returnURL
});
res.end();
return [2 /*return*/];
}
idToken = sessionCache.getIdToken(req, res);
sessionCache.delete(req, res);
if (!config.idpLogout) {
debug('performing a local only logout, redirecting to %s', returnURL);
res.writeHead(302, {
Location: returnURL
});
res.end();
return [2 /*return*/];
}
return [4 /*yield*/, getClient()];
case 1:
client = _a.sent();
returnURL = client.endSessionUrl({
post_logout_redirect_uri: returnURL,
id_token_hint: idToken
});
returnURL = returnURL + "&idToken=" + idToken;
debug('logging out of identity provider, redirecting to %s', returnURL);
res.writeHead(302, {
Location: returnURL
});
res.end();
return [2 /*return*/];
}
});
});
};
}
exports.default = logoutHandlerFactory;
//# sourceMappingURL=logout.js.map