Веб-компонент Авторизация

Состоит из двух новых HTML-тегов
  1. Для гостя <cb-m1-auth-guest>
  2. И для авторизованного пользователя <cb-m1-auth-user>
На странице появится один из двух элементов, в зависимости от условия авторизован пользователь или нет.
<% if(!cb.UserManager.isAuth(req)) { %> <cb-m1-auth-guest> <button class="cb-button cb-neutral" data-progress> <%= cb.system.text.auth.panelEnter[LANG]%> </button> </cb-m1-auth-guest> <% } %> <% if(cb.UserManager.isAuth(req)) { %> <cb-m1-auth-user></cb-m1-auth-user> <% } %>

Кастомизация

Эти элементы не требуют дополнительной настройки, хотя возможна небольшая кастомизация не затрагивающая работу компонента. Делайте её после комментариев customization. /public/components/auth/index.js
// GUEST const setupGuest = async el => { const openMenuAndLoadAll = async () => { if (!isLoaded) { isLoaded = true cb.setupButton(button) const {progress} = button progress.hidden = false const folder = '/components/auth/guest/' await cb.loadAll(folder + 'loader') cb.system.utils.authGuestSetup(button) progress.hidden = true // customization guest dialog const dialog = button.previousElementSibling dialog.addEventListener('silentLoginLoaded', () => { // customization silentLogin tablist }) cb.system.utils.authGuestDialogSetup(dialog) // const container = dialog.querySelector('[auth-screen="login"]') // await cb.system.utils.authGuestOauthSetup(button.dataset.auth, container, folder) } const dialog = button.previousElementSibling dialog.dialogElement.showModal() } const button = el.querySelector('button') let isLoaded button.addEventListener('click', openMenuAndLoadAll) cb.system.authShow = openMenuAndLoadAll } customElements.define( 'cb-m1-auth-guest', class extends HTMLElement { async connectedCallback() { await cb.setupOnce(this, setupGuest) } } ) // USER const setupUser = async el => { cb.system.authMenu = el.parentNode //load component instantly await Promise.all([cb.interfaceLoaded(), cb.loadAll('/components/auth/user/loader')]) const {auth, msg} = cb.system.text const user = cb.system.user if (user) { cb.system.utils.authUserSetup(el) cb.system.utils.authLogOutSetup(el) cb.system.auth.remaindToSetPassword(90, '/account/password') // customization user if (user._system.isContentManager) { el.firstElementChild.insertAdjacentHTML('afterend', /*html*/ ` <button class="cb-option cb-cmsoff" role="menuitem" data-value="editpage" onclick="cb.system.goToEdit()">${cb.icon('edit', 'cb-neutral') + auth.edit}</button> <a class="cb-option" role="menuitem" href="/"> ${cb.icon('home', 'cb-neutral') + msg.homePage} </a> <a class="cb-option" role="menuitem" href="${cb.cmsUrl}"> ${cb.icon('apps', 'cb-neutral') + auth.siteManagement} </a> `) } } } customElements.define( 'cb-m1-auth-user', class extends HTMLElement { async connectedCallback() { await cb.setupOnce(this, setupUser) this.dispatchEvent(new CustomEvent('connect')) } disconnectedCallback() { this.dispatchEvent(new CustomEvent('disconnect')) } } )