使用 Identity Platform 为多个租户创建登录页面
本页面介绍了如何使用 FirebaseUI(一组开源的预建界面组件)和 Client SDK 为 Identity Platform 中的多个租户构建登录页面。
准备工作
获取组件
您可以直接从 CDN 提取界面脚本、Client SDK 和 CSS 文件,只需将其添加到页面的 <head>
元素即可:
<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'
构建用于选择租户的界面
FirebaseUI 仅处理登录流程;您需要构建自己的界面,供用户选择要登录的租户。
如需构建包含两个按钮的基本租户选择页面,请执行以下操作:
创建两个租户选择元素。
<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 渲染登录组件,请添加租户选择点击处理程序。在渲染界面组件之前,请在
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>
启动应用。此时会显示包含两个租户按钮的登录屏幕。
您还可以构建多页工作流。
例如,您可以创建一个工作流,其中第一页要求用户输入电子邮件,下一页允许用户选择租户。此外,您还可以为每个租户分别托管登录页面。为此,您必须从网址中解析租户 ID,然后将其设置在 Auth
对象上。