¶ 将 Guard 接入到标准 WEB 应用
¶ 说明
Guard 5.0 (opens new window) 于 2022 年 8 月 17 日发布,如果你正在使用之前的版本 Guard 3.x (opens new window) 或 Guard 4.x (opens new window),可参考:
将 Guard 接入到原生 JS 项目 (opens new window)
¶ 简介
Guard 是 Authing 提供的一种轻便的认证组件,你可以把它嵌入在你任何的 MPA(Multiple Page Application)应用中,一站式处理复杂的用户认证流程。
准备好你的原生 JavaScript 项目,跟随引导将 Authing Guard 接入到你的原生 JavaScript 项目中吧!
¶ STEP 1:创建 Authing 应用
- 使用 Authing 创建一个应用:
- 进入控制台
- 展开左侧应用菜单,点击自建应用菜单
- 点击右上角创建自建应用按钮
- 填写应用名称和认证地址、选择标准 Web 应用
- 点击创建
- 在认证配置处填写登录回调 URL和登出回调 URL
- 换取 token 身份验证方式选择 none
- 保存当前配置。
¶ STEP 2:接入 Guard
根据你的使用场景和个人偏好,在使用 Guard 时,你可以选择是否采用构建流程。
¶ 使用构建工具
npm install --save @authing/guard
使用 appId
即可初始化 Guard,更多可选参数及其应用场景可参考:GuardOptions
import { Guard } from '@authing/guard'
const guard = new Guard({
appId: 'AUTHING_APP_ID'
})
点击查看使用示例 (opens new window),下载代码并进入对应的目录,即可快速体验 Guard 基本功能。
¶ 不使用构建工具
若不想经过构建流程就可以使用 Guard,请直接复制下面的代码到一个 HTML 文件中,并在浏览器中打开它:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.authing.co/packages/guard/5.0.4/guard.min.js"></script>
<link rel="stylesheet" href="https://cdn.authing.co/packages/guard/5.0.4/guard.min.css" />
</head>
<body>
<div id="guard"></div>
<script>
const guard = new GuardFactory.Guard({
appId: 'AUTHING_APP_ID'
})
</script>
</body>
</html>
至此,你已经完成了 Guard 的初始化,接下来你可以使用 Guard 实例来完成后续更多的操作。
¶ STEP 3:使用 Guard
Guard 提供三种登录方式,分别是嵌入模式、弹窗模式、跳转模式。
嵌入模式、弹窗模式:在指定的 DOM 中渲染一个登录框组件,通过这个组件面板可轻松完成登录、注册、找回密码、MFA 多因素认证、各种社会化登录等操作。在线体验 (opens new window)
跳转模式:Guard 完整集成并封装了 Authing 认证类 SDK,只需一行代码即可实现登录、登出、处理登录成功后的回调等能力。
使用 Guard 提供的各种 API 可拥有获取用户信息、切换语言、自定义样式等能力。
¶ 嵌入模式
使用 start
和 unmount
方法实现组件渲染和卸载。
<button id="unmount">unmount Guard</button>
<div id="guard"></div>
<script>
guard.start('#guard').then(userInfo => {
console.log(userInfo)
})
document.querySelector('#unmount').onclick = function () {
guard.unmount()
}
</script>
¶ 弹窗模式
当 Guard 初始化时的参数 mode
为 modal
时,启动窗口模式,可使用以下 API 操作 Guard 窗口的展示和隐藏。
<button id="show-guard">show Guard</button>
<button id="hide-guard">hide Guard</button>
<div id="guard"></div>
<script>
guard.start('#guard').then(userInfo => {
console.log(userInfo)
})
document.querySelector('#show-guard').onclick = function () {
guard.show()
}
document.querySelector('#hide-guard').onclick = function () {
guard.hide()
}
</script>
¶ 跳转模式
// login.html
guard.startWithRedirect()
// callback.html
guard.handleRedirectCallback().then(() => {
window.location.replace('personal.html')
})
¶ 退出登录
guard.logout()
¶ 用户注册
guard.startRegister()
¶ 判断用户登录状态
guard.checkLoginStatus().then(user => {
// 如果是未登录状态,user 为 undefined
console.log(user)
})
¶ 切换语言
<div id="change-lang">changeLang</div>
<script>
let lang = 'zh-CN'
document.querySelector('#change-lang').onclick = function () {
lang = 'zh-CN' ? 'en-US' : 'zh-CN'
guard.changeLang(lang)
}
</script>
¶ 自定义样式
<div id="change-content-css">changeContentCSS</div>
<script>
document.querySelector('#change-content-css').onclick = function () {
guard.changeContentCSS('body {background: red}')
}
</script>
¶ 启用多因素人脸识别
进入 Authing 控制台,左侧菜单选择 安全设置
-> 多因素认证
,右侧开启人脸识别
在原有基础上引入 face-api
,且在初始化 Guard 时传入参数 facePlugin
即可。
<script src="https://cdn.authing.co/packages/face-api/face-api.min.js"></script>
<div id="guard"></div>
<script>
const guard = new GuardFactory.Guard({
appId: 'AUTHING_APP_ID',
facePlugin: faceapi
})
</script>
¶ 示例代码
当前文档对应的完整示例代码请参考:examples (opens new window)
¶ 注册事件
使用 Guard 提供的 on
方法可以方便的注册一些实用的事件
guard.on('event-name', () => {
console.log('........')
})
常用事件列表:
事件名称 | 描述 | 回调参数 | 回调参数说明 |
---|---|---|---|
load | Guard 初始化完成,开始渲染页面 | authClient | AuthenticationClient 对象,详情请查看 authing-js-sdk (opens new window) |
load-error | Guard 初始化失败 | error | 错误信息 |
login | 用户登录成功 | user | 用户信息 |
login-error | 用户登录失败 | error | 错误信息 |
register | 用户注册成功 | user | 用户信息 |
register-error | 用户注册失败 | error | 错误信息 |
close | modal 模式中关闭 Guard 事件 | - | - |
¶ Guard 内置 Authing JS SDK
Guard 集成了 AuthenticationClient, 可调用 AuthenticationClient 的所有方法。
guard.getAuthClient().then(authClient => {
authClient.registerByEmail()
authClient.validateToken()
// .........
})
// ....
参考 Authentication SDK (opens new window)
¶ 常用参数列表
¶
GuardOptions
初始化 Guard 所需参数:
名称 | 类型 | 默认值 | 必传 | 描述 |
---|---|---|---|---|
appId | String | - | 是 | appId |
mode | normal / modal | normal | 否 | Guard 组件展示模式,normal:嵌入模式,modal:窗口模式 |
defaultScene | GuardModuleType | login | 否 | 组件默认渲染界面 |
align | none / left / center / right | none | 否 | Guard 默认展示位置 |
lang | zh-CN / en-US | zh-CN | 否 | 语言 |
isSSO | Boolean | true | 否 | 是否是单点登录 |
host | String | - | 否 | 自建应用的「认证地址」,如果是开启了单点登录,则应填写单点登录的「应用面板地址」 |
scope | String | - | 否 | OIDC scope |
redirectUri | String | - | 否 | 回调地址,可在 Console 控制台配置 |
state | String | - | 否 | OIDC 状态 |
facePlugin | FacePlugin | - | 否 | 控制台开启多因素人脸识别认证后必传 |
使用以上参数实例化 Guard,你可以体验 Guard 最基本的登录、注册等功能。
如果想拥有 Guard 的完整能力,可以配置 config 和 authClientOptions(相同参数以上表格中的值优先级更高):
¶
config
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
target | String | 指定 Guard 表单的挂载点,接受 querySelector (opens new window) (opens new window)能接受的所有参数或者 dom 元素,若未传入,Guard 会自动生成一个 div 标签放入 body 的最后面 | - |
mode | GuardMode | Guard 组件展示模式 | normal |
title | String | 产品名称 | Authing 控制台中的配置 |
logo | String | 产品 logo | Authing 控制台中的配置 |
contentCss | String | 自定义 CSS 样式,如果指定了,会在 DOM 的 head 中插入一个 节点。如 body {background:#6699 !important;} | - |
loginMethods | LoginMethods | 需要使用的普通登录(包括 LDAP)方式列表 | Authing 控制台中的配置 |
registerMethods | RegisterMethods | 需要使用的注册方式 | Authing 控制台中的配置 |
defaultRegisterMethod | RegisterMethods | 默认展示的注册方式 | Authing 控制台中的配置 |
defaultScenes | GuardModuleType | 打开组件时展示的界面 | GuardModuleType.LOGIN |
socialConnections | SocialConnections[] | 需要使用的社会化登录列表,如果在 Authing 控制台中没有配置,则不会显示 | Authing 控制台中的配置 |
enterpriseConnections | Array | 需要使用的企业身份源列表(不包括 LDAP),列表项值为配置的企业身份源唯一标识符,注意:企业身份源需要传入对应 appId 才能使用,如果在 Authing 控制台中没有配置,则不会显示 | Authing 控制台中的配置 |
defaultLoginMethod | String | 默认显示的登录方式。可选值为 options.loginMethods 中的某一项 | Authing 控制台中的配置 |
autoRegister | Boolean | 是否将注册和登录合并,合并后如果用户不存在将自动注册 | Authing 控制台中的配置 |
disableRegister | Boolean | 是否禁止注册,禁止的话会隐藏「注册」入口 | Authing 控制台中的配置 |
disableResetPwd | Boolean | 是否禁止重置密码,禁止的话会隐藏「忘记密码」入口 | Authing 控制台中的配置 |
clickCloseable | Boolean | Modal 模式时是否隐藏登录框右上角的关闭按钮,如果隐藏,用户将不能通过点击按钮关闭登录框 | Authing 控制台中的配置 |
escCloseable | Boolean | Modal 模式时是否可以通过键盘 ESC 键关闭登录框 | Authing 控制台中的配置 |
isSSO | Boolean | 是否是单点登录 | Authing 控制台中的配置 |
lang | 'zh-CN' | 使用语言,可选值为 zh-CN、en-US | 'en-US' |
langRange | ('zh-CN'| 'en-US')[] | 语言切换可选的范围,如果填入空数组 或 一个项时,则不会显示语言切换按钮 | ['zh-CN', 'en-US'] |
host | String | 自建应用的「认证地址」,如果是开启了单点登录,则应填写单点登录的「应用面板地址」 | - |
¶
GuardMode
键 | 值 | 说明 |
---|---|---|
Modal | 'modal' | 模态框模式 |
Normal | 'normal' | 正常模式 |
¶
LoginMethods
键 | 值 | 说明 |
---|---|---|
LDAP | 'ldap' | LDAP 身份目录登录(需要配置 LDAP 服务) |
AppQr | 'app-qrcode' | APP 扫码登录(需要接入 APP 扫码登录) |
Password | 'password' | 账号密码登录(包括手机号 + 密码、邮箱 + 密码、用户名 + 密码。) |
PhoneCode | 'phone-code' | 手机验证码登录 |
WxMinQr | 'wechat-miniprogram-qrcode' | 微信 PC 小程序扫码登录 |
AD | 'ad' | AD 用户目录登录 |
¶
RegisterMethods
键 | 值 | 说明 |
---|---|---|
'email' | 邮箱注册 | |
Phone | 'phone' | 手机验证码注册 |
¶
GuardModuleType
键 | 值 | 说明 |
---|---|---|
LOGIN | 'login' | 登录界面 |
REGISTER | 'register' | 注册界面 |
¶
SocialConnections
键 | 值 | 说明 |
---|---|---|
ALIPAY | 'alipay' | 支付宝登录 |
'google' | 谷歌登录 | |
WECHATPC | 'wechat:pc' | 微信 PC 登录 |
WECHATMP | 'wechat:webpage-authorization' | 微信网页授权 |
WECHATMOBILE | 'wechat:mobile' | 微信移动端扫码登录 |
WECHATWORK_ADDRESS_BOOK | 'wechatwork:addressbook' | 企业微信通讯录 |
WECHATWORK_CORP_QRCONNECT | 'wechatwork:corp:qrconnect' | 企业微信内部应用 |
DINGTALK | 'dingtalk' | 钉钉登录 |
'weibo' | 微博登录 | |
APPLE | 'apple' | Apple 登录 |
LARK_PUBLIC | 'lark-public' | 飞书应用商店登录 |
LARK_INTERNAL | 'lark-internal' | 飞书企业自建应用登录 |
BAIDU | 'baidu' | 百度登录 |
'linkedin' | 领英登录 | |
SLACK | 'slack' | Slack 登录 |
YIDUN | 'yidun' | 网易易盾登录 |
QINGCLOUD | 'qingcloud' | 青云 QingCloud 登录 |
'facebook' | FaceBook 登录 |
¶
authClientOptions
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
appId | String | 是 | 应用 ID |
appHost | String | 否 | 应用完整域名,如 https://sample-app.authing.cn,不带最后的斜线 '/' |
tenantId | String | 否 | 租户 ID |
lang | zh-CN / en-US | 否 | 语言 |
secret | String | 否 | 应用密钥 |
protocol | oauth / oidc / saml / cas | 否 | 应用身份协议 |
tokenEndPointAuthMethod | client_secret_post / client_secret_basic / none | 否 | 获取 token 端点认证方式 |
introspectionEndPointAuthMethod | client_secret_post / client_secret_basic / none | 否 | 检查 token 端点认证方式 |
revocationEndPointAuthMethod | client_secret_post / client_secret_basic / none | 否 | 撤回 token 端点认证方式 |
timeout | Number | 否 | 请求超时时间 |
websocketHost | String | 否 | Websocket 服务器域名 |
requestFrom | String | 否 | 请求来源 |
token | String | 否 | token |
publicKey | String | 否 | 密码传输加密公钥 |
privateKeys | PrivateKey[] | 否 | 用于解密 Token 的私钥 |
onError | (code: number, message: string, data?: any): void | 否 | 错误回调函数 |