实现前端指纹登录的简单示例

随笔

一切的失败都来源于实力不足

引入

如今的指纹识别已经充分运用到平板、笔记本电脑、手机甚至在用户支付中也是大有造诣,所以指纹作为我们用户独属于自己的身份识别信号也是相当重要的,正是这种独特的身份信号保存着我们的隐私信息

在现代网页应用中,用户验证是非常重要的一环。除了传统的用户名和密码登录方式外,指纹登录逐渐成为一种便捷且安全的认证方式。本文将介绍一个简单的前端指纹登录示例

实现过程

>>检测是否可以使用指纹

>>获取用户指纹信息并存储到本地

>>当用户再次登录时与本地中的数据进行对比

>>做出反馈

>>登录成功/失败

初始化项目信息

首先,先来了解两个第三方库:

fingerprintjs2 是一个用于在浏览器中生成客户端指纹的 JavaScript 库。它可以收集多种浏览器环境和设备信息,生成唯一的标识符,用于识别用户或设备

crypto-js是一个 JavaScript 加密库,提供了多种加密算法和常用的加密操作函数。它可以用于在浏览器和Node.js 环境中进行数据加密、解密、哈希计算等操作


请将以下代码插入到 <head> 标签内:

<script src="https://cdnjs.cloudflare.com/ajax/libs/fingerprintjs2/2.1.0/fingerprint2.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>

创建页面布局

接下来,我们需要创建一个简单的页面布局,包含一个欢迎标题、说明文本和两个按钮。请将以下代码插入到 <body> 标签内:

<h1>欢迎来到我的网站</h1>
<p>这是一个简单的示例页面,用于演示前端指纹登录的实现。</p>
<p>你可以点击下面的按钮进行登录:</p>
<button class="button" style="border: none;" id="getfinger">录入指纹</button>
<a href="#" class="button" onclick="loginWithFingerprint()">指纹登录</a>

实现功能函数

接下来,我们需要编写一些 JavaScript 函数来实现指纹登录的功能。请将以下代码插入到 <script> 标签内:

<script>// 判断是否可以使用指纹if (window.navigator && window.navigator.credentials && window.navigator.credentials.get) {console.log('指纹识别功能可用');} else {console.log('指纹识别功能不可用');}// 录入用户指纹function registerFingerprint() {console.log('Place your finger on the fingerprint sensor:');Fingerprint2.get(function (components) {const fingerprint = JSON.stringify(components);const fingerprintHash = CryptoJS.SHA256(fingerprint).toString();// 将指纹哈希值保存到文件中// 这里可以根据实际需求选择适当的存储方式(如数据库)console.log('Fingerprint registered:', fingerprintHash);let hash = [];hash.push(fingerprintHash);localStorage.setItem('hash', hash);});}// 进行指纹识别function loginWithFingerprint() {console.log('Place your finger on the fingerprint sensor:');Fingerprint2.get(function (components) {const fingerprint = JSON.stringify(components);const fingerprintHash = CryptoJS.SHA256(fingerprint).toString();// 从文件中获取之前保存的指纹哈希值// 这里需要根据实际的存储方式进行读取操作let hashArray = localStorage.getItem('hash');const savedFingerprintHash = hashArray;if (savedFingerprintHash.includes(fingerprintHash)) {console.log('Fingerprint authentication successful. Access granted.');} else {console.log('Fingerprint authentication failed. Access denied.');}});}
</script>

添加事件监听器

最后,我们需要为按钮添加事件监听器,以便在用户点击按钮时触发对应的功能函数。请将以下代码插入到 <script> 标签内:

<script>const getfinger = document.querySelector('#getfinger');getfinger.addEventListener('click', registerFingerprint);
</script>

完整代码

最终的 HTML 代码如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>前端指纹登录示例</title><!-- 引入外部库 --><script src="https://cdnjs.cloudflare.com/ajax/libs/fingerprintjs2/2.1.0/fingerprint2.min.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script><!-- 自定义样式 --><style>body {background-color: #f0f0f0;font-family: Arial, sans-serif;font-size: 14px;}h1 {color: #333333;font-size: 24px;margin-top: 20px;}p {color: #666666;line-height: 1.5em;margin-bottom: 10px;}.button {display: inline-block;padding: 8px 16px;background-color: #4285f4;color: #ffffff;text-decoration: none;border-radius: 4px;}</style>
</head><body><!-- 页面内容 --><h1>欢迎来到我的网站</h1><p>这是一个简单的示例页面,用于演示前端指纹登录的实现。</p><p>你可以点击下面的按钮进行登录:</p><button class="button" style="border: none;" id="getfinger">录入指纹</button><a href="#" class="button" onclick="loginWithFingerprint()">指纹登录</a><!-- 脚本 --><script>// 判断是否可以使用指纹if (window.navigator && window.navigator.credentials && window.navigator.credentials.get) {console.log('指纹识别功能可用');} else {console.log('指纹识别功能不可用');}// 录入用户指纹function registerFingerprint() {console.log('Place your finger on the fingerprint sensor:');Fingerprint2.get(function (components) {const fingerprint = JSON.stringify(components);const fingerprintHash = CryptoJS.SHA256(fingerprint).toString();// 将指纹哈希值保存到文件中// 这里可以根据实际需求选择适当的存储方式(如数据库)console.log('Fingerprint registered:', fingerprintHash);let hash = [];hash.push(fingerprintHash);localStorage.setItem('hash', hash);});}// 进行指纹识别function loginWithFingerprint() {console.log('Place your finger on the fingerprint sensor:');Fingerprint2.get(function (components) {const fingerprint = JSON.stringify(components);const fingerprintHash = CryptoJS.SHA256(fingerprint).toString();// 从文件中获取之前保存的指纹哈希值// 这里需要根据实际的存储方式进行读取操作let hashArray = localStorage.getItem('hash');const savedFingerprintHash = hashArray;if (savedFingerprintHash.includes(fingerprintHash)) {console.log('Fingerprint authentication successful. Access granted.');} else {console.log('Fingerprint authentication failed. Access denied.');}});}// 添加事件监听器const getfinger = document.querySelector('#getfinger');getfinger.addEventListener('click', registerFingerprint);</script>
</body></html>

结论

通过以上步骤,我们成功创建了一个简单的前端指纹登录示例。用户可以点击 "录入指纹" 按钮来录入指纹,然后在之后的登录过程中点击 "指纹登录" 按钮进行指纹认证。

请注意,这只是一个简单的演示示例,实际中可能需要更复杂的逻辑和安全性措施来保护用户的指纹数据。在实际应用中,建议使用后端服务器来处理指纹数据的存储和验证,以确保数据的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vulnhub 靶场】【IA: Keyring (1.0.1)】【中等】【20210730】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/ia-keyring-101,718/ 靶场下载&#xff1a;https://download.vulnhub.com/ia/keyring-v1.01.ova 靶场难度&#xff1a;中等 发布日期&#xff1a;2021年07月30日 文件大小&#xff1a;1.1 GB 靶场作者&#xf…

基于Mamdani模糊神经网络的调速控制系统simulink建模与仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 模糊神经网络控制器概述 4.2 模糊神经网络控制器基本原理 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................…

Linux与常用的Linux命令

Linux概念 Linux 是一种免费使用和自由传播的类 UNIX 操作系统。它的内核最初是由芬兰计算机科学家林纳斯本纳第克特托瓦兹&#xff08;Linus Benedict Torvalds&#xff09;在 1991 年发布&#xff0c;并持续发展至今。Linux 的设计灵感来源于 MINIX 和 Unix 系统&#xff0c…

UE5 项目设置

1、定义设置哪些参数 UCLASS(configEngine, globaluserconfig) class ADVMOD_API UGlobalSettings : public UObject {GENERATED_BODY()public:UGlobalSettings();const FString& GetPythonExePath() const { return PythonExePath.FilePath; }private:UPROPERTY(config, E…

【SpringBoot零基础入门到项目实战①】解锁现代Java开发之门:深度探究Spring Boot的背景、目标及选择理由

文章目录 引言Spring Boot的背景和目标背景目标 为什么选择Spring Boot1. 简化配置2. 内嵌式容器3. 生态系统支持4. 大量的Starter5. 广泛的社区支持6. 适用于微服务架构7. 丰富的扩展机制 实例演示创建一个简单的Spring Boot应用 拓展与深入学习1. Spring Boot Actuator2. Spr…

程序设计原则

▶1.程序设计的基本原则 程序设计中哪些因素很重要&#xff0c;不同专家有不同看法&#xff0c;专家们都有直己独到的见解。有人认为程序的清晰性很重要&#xff1b;有人认为程序的执行效率要优先考虑&#xff1b;有人认为程序的正确性是头等大事&#xff1a;有些人认为这些都…

EtherCAT主站SOEM -- 10 -- SOEM之基于QT搭建自己的EtherCAT主站

EtherCAT主站SOEM -- 2 -- SOEM之ethercatbase.h/c文件解析 0 QT-SOEM视频预览:一 SOEM主站解析:1.1 调用ec_init(eth0) 函数:1.1.1 执行到 nicdrv.c 文件 (网络接口卡(NIC)驱动程序)1.1.1.1 ecx_setupnic函数1.1.1.2 ecx_setupnic函数解析1.1.1.3 ec_setupheader(void …

word如何快速制作简易代码块

先上解决方案。 方式一&#xff08;全自动&#xff09;&#xff1a; typora编辑&#xff0c;导出选择word文档即可。内网环境&#xff0c;故放弃。 方式二&#xff08;全手动&#xff09;&#xff1a; 在修改文档时&#xff0c;左侧会有“段落布局”按钮&#xff0c;点击该按…

力扣刷题-二叉树-路径总和

112 路径总和 给定一个二叉树和一个目标和&#xff0c;判断该树中是否存在根节点到叶子节点的路径&#xff0c;这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树&#xff0c;以及目标和 sum 22&#xff0c; 返回 true, 因为…

记录 | Visual Studio报错:const char*类型的值不能用于初始化char*类型

Visual Studio 报错&#xff1a; const char *”类型的值不能用于初始化“char *”类型的实体错误 解决办法&#xff1a; 1&#xff0c;强制类型转换&#xff0c;例如&#xff1a; char * Singer::pv[] {(char*)"other", (char*)"alto", (char*)"c…

arp协议

arp协议 ARP协议简介 在探讨计算机网络的复杂世界时&#xff0c;我们不可避免地会遇到地址解析协议&#xff08;ARP&#xff09;。ARP协议扮演着一个关键角色&#xff0c;它允许网络设备在发送数据时确定目标设备的物理地址&#xff0c;即媒体访问控制&#xff08;MAC&#x…

Linux常见面试题30题详细答案解析(三)

1. 如何使用Linux中的系统日志进行故障排查和问题诊断&#xff1f; Linux中的系统日志记录了系统运行过程中的各种事件和错误信息。通过查看和分析系统日志&#xff0c;可以帮助管理员进行故障排查和问题诊断。了解如何查看和使用系统日志&#xff0c;可以提高故障排查和问题解…

1848_emacs_org-mode代码块环境

Grey 全部学习内容汇总&#xff1a; https://github.com/greyzhang/g_org 1848_emacs_org-mode代码块环境 这一部分主要是涉及到一些代码的执行、引用以及输出处理等功能。从之前我看的资料来说&#xff0c;更加偏重于可重现研究但不一定是文学式编程的必要部分。 内容来源…

git 上传大文件操作 lfs 的使用

我们要先去下载 下载后安装 我最后还是下载到了D:\git\Git\bin这个目录下 如何检查是否下载成功呢&#xff0c;用 git lfs install 在命令行运行就可以查看 下面怎么上传文件呢 首先我们还是要初始化文件的 git init 下一步输入命令 git lfs install 下一步 git lfs tra…

【小程序】-【

swiper、swiper-item轮播图 swiper是滑块视图容器。其中只可放置swiper-item组件。部分常用属性如下&#xff0c;其余属性详见&#xff1a;官方文档 <view class"banner"><swiperprevious-margin"30rpx"circularautoplayinterval"3000&q…

EasyExcel实现⭐️本地excel数据解析并保存到数据库的脚本编写,附案例实现

目录 前言 一、 EasyExcel 简介 二、实战分析 1.Controller控制层 2. service方法和方法实现 3.EasyExcel相关类 3.1 excel表实体类 3.2 自定义监听器类 4.测试 4.1 准备工作 4.2 断点调试 5.生成脚本文件 三、分析总结 章末 小伙伴们大家好&#xff0c;最近开发的时…

Ansible-playbook编译.yml脚本

1、playbook是什么&#xff1f; 在Ansible中&#xff0c;Playbook是用于配置、部署和管理被控节点的剧本。它由一个或多个play&#xff08;角色&#xff09;组成&#xff0c;每个play可以包含多个task&#xff08;台词&#xff0c;动作&#xff09;。使用Ansible的Playbook&am…

网络编程-认识套接字socket

文章目录 套接字概念端口号网络字节序 套接字类型流套接字数据报套接字 socket常见APIsocket函数bind函数listen函数accept函数connect函数sockaddr结构 套接字概念 socket套接字是进程之间一种通信机制&#xff0c;通过套接字可以在不同进程之间进行数据交流。在TCP/UDP中&…

如何开发一个prompt?prompt的使用有哪些原则?

提示词使用原则 如何开发一个跟自己预期结果接近的提示词&#xff1f;有哪些基本原则&#xff1f; 提示词迭代开发 写提示词时&#xff0c;第一次尝试是值得的&#xff0c;反复完善提示&#xff0c;获得越来越接近你想要的结果 原文来源于B站吴恩达提示工程教学公开课。…

低代码是美食!!!

一、什么是低代码 低代码是一种软件开发方法&#xff0c;通过图形化界面和少量手写代码&#xff0c;让开发者能够更迅速、简单地构建应用程序。相比传统的编码方式&#xff0c;低代码平台提供了可视化的开发工具和预构建的组件&#xff0c;使开发过程更加快捷高效。 二、低代码…