在现代Web应用程序中,安全性是非常重要的一部分。 身份验证是保护Web应用程序和其内容的主要方法之一。Fastify是一个快速而易于使用的Node.js框架,它具有很好的插件架构并允许你轻松地添加任何插件,如身份验证插件。
在本文中,我们将学习如何使用Fastify框架来添加身份验证功能。我们将使用JSON Web令牌(JWT)进行身份验证。我们还将使用bcryptjs来安全地存储用户密码。
步骤1:安装Fastify和相关插件
我们开始之前,需要安装Fastify框架及其身份验证插件fastify-jwt以及密码加密插件bcryptjs。我们可以使用npm包管理器来安装这些插件。
npm install fastify fastify-jwt bcryptjs --save
步骤2:配置Fastify插件和路由
在我们开始写代码之前,先创建一个目录并初始化一个Node.js项目。
创建一个名为fastify-authentication的目录,然后使用以下命令来初始化一个NodeJS项目:
npm init
然后编辑 package.json 文件,添加以下内容:
-- -------------------- ---- ------- - ------- ------------------------- ---------- -------- -------------- --- ------- ----------- ---------- - ------- ----- -------- -- ---- ----------- -- ---- -- -- ----------- --- --------- --- ---------- ------ --------------- - ----------- --------- ---------- ---------- -------------- --------- - -
创建一个名为index.js的文件,并添加以下代码:
-- -------------------- ---- ------- ----- ------- - -------------------- ------- ---- -- ----- -------- - ------------------- ----- --- - ---------------------- ----- ------ - ------------- ----- ----- - -- --------------------- - ------ -- ----------------------- ----- --------- ------ -- - ----- - --------- -------- - - ------------ -- ----- -- ---- ------ -- ---------------- -- ------------- --- ---------- - ------------------------ -------- --------- ------- ------- -- ------ - ----- -------------- - ----- ----------------------- --- ------------ --------- --------- -------------- -- ------------------------ -------- ----- ------- ------------- -- -- ---------------------- ----- --------- ------ -- - ----- - --------- -------- - - ------------ -- ----- -- ---- ------ ----- ---- - --------------- -- ------------- --- --------- -- ------- - ------------------------ -------- -------- -------- -- --------- -- ------ - -- ----- -- -------- -- ------- ----- ----------------- - ----- -------------------------- -------------- -- -------------------- - ------------------------ -------- -------- -------- -- --------- -- ------ - -- -------- --- ----- ----- - ------------------ -------- -- ------------ ----- -- -- ------------------------- ----- --------- ------ -- - -- ------ --- --- - ----- ------------------- ------------ -------- ----------- --------------- -- - ----- ----- - ------------------------ -------- ----------- -- - -- -------------------- --- -- - -- ----- ----- --- -------------------- ------ --------- -- ---- ---------------------------------- --
在这个例子中,我们定义了三个路由:
- 注册用户路由(/signup):这个路由将处理用户注册。它需要一个名为username和一个名为password的POST请求体参数。如果该用户名已经存在,它将返回一个400错误响应。否则将使用bcryptjs来加密该用户的密码,并将该用户添加到用户数组中。它将返回一个状态码201和一个响应对象,指示用户已成功创建。
- 登录路由(/login):这个路由将处理用户登录。它需要一个名为username和一个名为password的POST请求体参数。如果该用户名不存在或密码不匹配,它将返回一个带有状态码401和身份验证错误消息的响应对象。否则,它将使用fastify-jwt生成一个JWT,并通过一个标准的响应对象返回JWT。
- 受保护路由(/protected):这个路由将要求身份验证。请求的JWT将在请求头中的Authorization字段中传递,例如Authorization: Bearer <token>。它使用fastify-jwt来验证JWT。如果JWT验证成功,它将返回一个带有状态码200和成功身份验证消息的响应对象。否则,它将返回一个带有状态码401和身份验证错误消息的响应对象。
步骤3:测试身份验证
现在可以启动fastify服务器,并使用curl命令测试身份验证。
node index.js
使用curl测试我们的API时,我们需要在请求头中提供JWT。让我们从注册一个新用户开始。
curl -X POST -H "Content-Type: application/json" -d '{"username":"john","password":"password"}' http://localhost:3000/signup
我们成功注册了一个新用户(John),现在我们可以使用他的凭证来登录并获取JWT。
curl -X POST -H "Content-Type: application/json" -d '{"username":"john","password":"password"}' http://localhost:3000/login
响应应包括一个JWT,如下所示:
{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImpvaG4ifQ.YLe9A8xbZbq3JTejYyY7g05bkFtRtm7V19SmJbYC1BE"}
现在我们可以使用JWT来访问受保护的路由。
curl -H "Authorization: Bearer <token>" http://localhost:3000/protected
如果JWT验证成功,API将返回以下响应:
{"message":"Successful authentication"}
结论
现在你已经学会了如何为Node.js应用程序添加身份验证。使用Fastify和JSON Web Tokens(JWT),可以轻松地实现身份验证,并保护你的Web应用程序和其内容。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/677740bd6d66e0f9aa312e0b