Identity Platform으로 여러 테넌트용 로그인 페이지 만들기
이 페이지에서는 오픈소스 기반의 사전 빌드된 UI 구성요소 모음인 FirebaseUI과 클라이언트 SDK를 사용하여 Identity Platform의 여러 테넌트용 로그인 페이지를 빌드하는 방법을 보여줍니다.
시작하기 전에
구성요소 가져오기
페이지의 <head>
요소에 UI 스크립트, 클라이언트 SDK, CSS 파일을 추가하여 CDN에서 직접 가져올 수 있습니다.
<script src="https://www.gstatic.com/firebasejs/x.x.x/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/x.x.x/firebase-auth.js"></script>
<script src="https://cdn.firebase.com/libs/firebaseui/x.x.x/firebaseui.js"></script>
<link rel="stylesheet" href="https://cdn.firebase.com/libs/firebaseui/x.x.x/firebaseui.css" />
또는 npm
을 사용하여 모듈을 설치한 후 ES6 가져오기로 참조할 수 있습니다.
npm install firebase --save && \
npm install firebaseui --save
// Import Firebase JS SDK.
import * as firebase from "firebase/app";
import "firebase/auth";
import * as firebaseui from 'firebaseui'
테넌트 선택 UI 빌드
FirebaseUI는 로그인 흐름만 처리하므로 사용자가 로그인할 테넌트를 선택할 수 있는 고유한 UI를 빌드해야 합니다.
버튼 두 개를 사용하여 기본 테넌트 선택 페이지를 빌드하려면 다음 단계를 따르세요.
두 개의 테넌트 선택 요소를 만듭니다.
<div id="tenant-selection-buttons"> <button id="tenant1-select-button" data-val="tenantId1">Display name of Tenant 1</button> <button id="tenant2-select-button" data-val="tenantId2">Display name of Tenant 2</button> </div>
FirebaseUI의 컨테이너 요소를 만듭니다.
<div id="firebaseui-auth-container"></div>
각 테넌트에 대한 구성을 만듭니다.
<script> var uiConfigs = { 'TENANT_ID1': { 'signInOptions': [firebase.auth.EmailAuthProvider.PROVIDER_ID], 'credentialHelper': 'none', 'signInFlow': 'popup', 'callbacks': { 'signInSuccessWithAuthResult': function(authResult, redirectUrl) { // The sign in success callback. return false; } }, // tosUrl and privacyPolicyUrl accept either url string or a callback // function. // Terms of service url/callback. tosUrl: '[YOUR_TOS_URL]', // Privacy policy url/callback. privacyPolicyUrl: function() { window.location.assign('[YOUR_PRIVACY_POLICY_URL]'); } }, 'TENANT_ID2': { 'signInOptions': [firebase.auth.GoogleAuthProvider.PROVIDER_ID], 'credentialHelper': 'none', 'signInFlow': 'popup', 'callbacks': { 'signInSuccessWithAuthResult': function(authResult, redirectUrl) { // The sign in success callback. return false; } }, // tosUrl and privacyPolicyUrl accept either url string or a callback // function. // Terms of service url/callback. tosUrl: '[YOUR_TOS_URL]', // Privacy policy url/callback. privacyPolicyUrl: function() { window.location.assign('[YOUR_PRIVACY_POLICY_URL]'); } } }; </script>
FirebaseUI로 로그인 구성요소를 렌더링하려면 테넌트 선택 클릭 핸들러를 추가합니다. UI 구성요소를 렌더링하기 전에
Auth
인스턴스에 테넌트 ID를 설정합니다.<script> var ui = new firebaseui.auth.AuthUI(firebase.auth()); tenantSelectionButton.addEventListener('click', (e) => { var tenantId = e.target.getAttribute('data-val'); firebase.auth().tenantId = tenantId; ui.reset(); ui.start('#firebaseui-auth-container', uiConfigs[tenantId]); }); </script>
앱을 시작합니다. 두 개의 테넌트 버튼이 있는 로그인 화면이 표시됩니다.
여러 페이지로 구성된 워크플로를 만들 수도 있습니다.
예를 들어 첫 번째 페이지에서 사용자에게 이메일을 묻고 다음 페이지에서 테넌트를 선택할 수 있는 워크플로를 만들 수 있습니다.
또한 각 테넌트마다 별도의 로그인 페이지를 호스팅할 수 있습니다. 이렇게 하려면 URL에서 테넌트 ID를 파싱한 다음 Auth
객체에서 설정해야 합니다.