在 Next.js 中实现 WebAuthn:动手指南
一个动手实践指南,讲解如何在 Next.js 中实现 WebAuthn,包含实时代码示例。
一个动手实践指南,讲解如何在 Next.js 中实现 WebAuthn,包含实时代码示例。
欢迎回到我们的 WebAuthn 系列。在我们之前的文章中,我们介绍了 WebAuthn 的基础知识,以及一个 101 指南。如果你刚刚加入,请随时查看这些基础文章以快速了解。
今天,我们将卷起袖子,把理论付诸实践。我们将利用 Next.js 的新特性“Server Actions”。我们的目标是什么?在 Next.js 应用中实现 WebAuthn,并为 WebAuthn 做好准备。
在我们深入编码的海洋之前,先看一下你在旅程结束时可以期待什么-一个功能齐全的演示网站。探索它,看看 WebAuthn 的实际应用,并了解你将要构建的内容。在这个演示网站中,你可以注册新用户并用刚刚注册的 passkey 登录。

对于那些倾向于持有地图的人,我们为你提供帮助!我们将讨论的所有代码都可以在我们的公共 GitHub 仓库 中找到。这个仓库是你的伴侣指南,提供我们实现的完整源代码。
准备好踏上这次激动人心的冒险了吗?让我们开始吧!
在我们开始之前,确保我们拥有一切所需:
@simplewebauthn/browser、@simplewebauthn/server 和 @simplewebauthn/typescript-types现在,随着我们的工具和材料在手,我们准备开始构建。
无论是在生产环境还是本地开发中,初始化一个 KV 存储都很容易,按照这篇指南将 KV 存储连接到你的项目并获取环境值:https://vercel.com/docs/storage/vercel-kv/quickstart
我们导出了两个函数:
getCurrentSession:使用 Next.js 的 cookie 助手为当前请求创建一个会话,并返回其值。updateCurrentSession:将数据保存到当前会话中。与我们的会话实现类似,让我们实现一个简单的用户数据库。
我们创建了根据电子邮件查找用户的函数,以及根据电子邮件更新用户数据的函数。记住,这仅用于演示,在实际产品中,用户数据通常存储在数据库中。
在我们继续之前,让我们看看注册和认证流程的图表:
如你所见,我们需要准备两个函数:
generateWebAuthnRegistrationOptionsverifyWebAuthnRegistration类似于注册,登录需要两个函数:
generateWebAuthnLoginOptionsverifyWebAuthnLogin以下是代码:
我们已经完成了准备工作,让我们构建页面:
恭喜你通过在 Next.js 应用中实现 WebAuthn 的复杂性。作为结束,重要的是要解决在生产环境中部署它的一些关键考虑因素。
userId 或 username。感谢你加入我们的教育探险。即便在这个最小的示例中,集成 WebAuthn 也不是一个简单的任务,还有另一种选择,尝试 Logto 的多因素认证中的 WebAuthn: