IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 代码,直接运行 -> 正文阅读

[JavaScript知识库]代码,直接运行

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>
			Title
		</title>
	</head>
	<body>
		<div id="app">
			{{ message }}
		</div>
		<script src="https://cdn.jsdelivr.net/npm/vue">
		</script>
		<!--<script src="https://unpkg.com/axios/dist/axios.min.js"></script>-->
	</body>
	<script>
		var app = new Vue({

			el: "#app",

			data: {

				message: 'Hello Vue!',

				touchIDOptions: {

					publicKey: {

						rp: {
							name: "chat-system"
						},
						// 网站信息
						user: {

							name: "",
							// 用户名
							id: "",
							// 用户id(ArrayBuffer)
							displayName: "" // 用户名
						},

						pubKeyCredParams: [

						{

							type: "public-key",

							alg: -7 // 接受的算法
						}

						],

						challenge: "",
						// 凭证(ArrayBuffer)
						// authenticatorSelection: {
						//   authenticatorAttachment: "platform"
						// }
						authenticatorSelection: {
							userVerification: "preferred"
						},

					}

				},

			},

			methods: {

				base64ToArrayBuffer: function(base64) {

					// 解码
					const binaryString = window.atob(base64);

					const len = binaryString.length;

					const bytes = new Uint8Array(len);

					for (let i = 0; i < len; i++) {

						bytes[i] = binaryString.charCodeAt(i);

					}

					return bytes.buffer;

				},

				base64ToArray(base64) {

					// 解码
					const binaryString = window.atob(base64);

					const len = binaryString.length;

					const bytes = new Uint8Array(len);

					for (let i = 0; i < len; i++) {

						bytes[i] = binaryString.charCodeAt(i);

					}

				},

				touchIDRegistered: async
				function(userName, userId, certificate) {

					// 校验设备是否支持touchID
					const hasTouchID = await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();

					if (hasTouchID && window.confirm("检测到您的设备支持指纹登录,是否启用?")) {

						// 更新注册凭证
						this.touchIDOptions.publicKey.challenge = this.base64ToArrayBuffer(window.btoa(certificate));

						// 更新用户名、用户id
						this.touchIDOptions.publicKey.user.name = userName;

						this.touchIDOptions.publicKey.user.id = this.base64ToArrayBuffer(window.btoa(userId));

						// 调用指纹设备,创建指纹
						const publicKeyCredential = await navigator.credentials.create(this.touchIDOptions);

						if (publicKeyCredential && "rawId" in publicKeyCredential) {

							// 将rowId转为base64
							const rawId = publicKeyCredential["rawId"];

							const touchId = this.arrayBufferToBase64(rawId);

							const response = publicKeyCredential["response"];

							// 获取客户端信息
							const clientDataJSON = this.arrayBufferToString(response["clientDataJSON"]);

							// 调用注册TouchID接口
							// ''''''
						}

					}

				},

	         authLogin: async function() {

					{

						//  ... 授权登录成功,其他代码省略 ... //
						console.log("授权登录成功,其他代码省略")

						// 保存用户凭证,用于指纹登录
						// localStorage.setItem("certificate", certificate);
						// 校验设备是否支持touchID
						const hasTouchID = await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();

						if (hasTouchID) {

							//  ... 其他代码省略 ... //
							// 获取Touch ID,检测用户是否已授权本网站指纹登录
							let data = {

								"certificate": "1212asdfghjklasdfghjkl1212",

								"id": "asdfghjklasdfghjklasdfghjkl",

								"status": "no",

								"username": "codercoder"

							}

							if (data.status == "no") {

								console.log("未注册!!!!!!")

								await this.touchIDRegistered(data.username, data.id, data.certificate);

							} else {

								// {
								//     "certificate": "12121212",
								//     "id": "asdfghjkl",
								//     "status": "yes",
								//     "username": "codercoder"
								// }
								// setTimeout(() => {
								//   if (window.confirm("您已授权本网站通过指纹登录,是否立即登录?")) {
								//     this.touchIDLogin(certificate, data.touchId);
								//   }
								// }, 1000);
							}

							// 保存touchid
							console.log("保存touchid")

							localStorage.setItem("touchId", data);

							// 跳转消息组件
							// await this.$router.push({
							//     name: "message"
							// });
							return;

						}

						return;

					};

				}

			},

			created: function() {

				this.authLogin()

			}

		})
	</script>

</html>

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 18:50:47  更:2022-01-30 18:51:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:40:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码