scrivito
Version:
Scrivito is a professional, yet easy to use SaaS Enterprise Content Management Service, built for digital agencies and medium to large businesses. It is completely maintenance-free, cost-effective, and has unprecedented performance and security.
48 lines (36 loc) • 1.23 kB
text/typescript
import { AuthHandler } from 'scrivito_sdk/app_support/auth_handler';
import { changeLoggedInState } from 'scrivito_sdk/app_support/logged_in_state';
import { getOfflineMode } from 'scrivito_sdk/app_support/offline_mode';
import { getUserInfo } from 'scrivito_sdk/app_support/user_info';
import { startPollingLoggedInUser } from 'scrivito_sdk/app_support/user_logged_in_status';
import { wait } from 'scrivito_sdk/common';
import { load } from 'scrivito_sdk/loadable';
export const loggedInVisitorAuthHandler: AuthHandler = {
getUserData() {
const userInfo = getUserInfo();
if (!userInfo) return;
const { sub: id, name, email, picture } = userInfo;
return { id, name, email, picture: picture || null };
},
isUserLoggedIn() {
verifyUserIsLoggedIn();
if (!getOfflineMode()) startPollingLoggedInUser();
return true;
},
ensureUserIsLoggedIn() {
// nothing to do, we are logged in already
},
iamTokenFetcher() {
return undefined;
},
loginHandler() {
return 'redirect';
},
};
async function verifyUserIsLoggedIn() {
const user = await Promise.race([
load(loggedInVisitorAuthHandler.getUserData),
wait(30),
]);
if (!user) changeLoggedInState(false);
}