随着互联网的发展,越来越多的网站和应用需要实现用户注册和登录功能。这些功能对于网站和应用的安全性和用户体验至关重要。本文将介绍如何使用 Express.js 实现登陆验证功能,让你的网站和应用更加安全和用户友好。
简介
在使用 Express.js 实现登陆验证功能之前,我们需要了解一些基本的概念和技术。其中包括:
JSON Web Token (JWT)
JSON Web Token(JWT)是一种行业标准的身份验证和授权机制。它是一个轻量级的安全标准,允许在网络上传输声明。JWT 通常用于支持用户身份验证和授权,以及在应用程序和服务之间共享信息。
通常来说,JWT 由三个部分组成:
- Header(标头):描述了 JWT 的元数据,包括令牌的类型和使用的加密算法。
- Payload(载荷):携带了要传输的信息,比如用户的 ID、用户名等。
- Signature(签名):用于验证 Payload 是否被篡改。
Passport.js
Passport.js 是一个 Node.js 的身份验证库,具有可扩展性和灵活性。它支持多种身份验证策略,包括本地(用户名和密码)、OAuth、OpenID、SAML 等。
Passport.js 提供一个简单的中间件来处理身份验证请求,而且它的 API 设计非常简单,易于学习和使用。
Express.js
Express.js 是 Node.js 的一个流行的 Web 服务框架,它提供了基本的请求响应模型,以及扩展性强的插件架构。
实现
下面是一个简单的 Express.js 实现登陆验证的示例代码。
安装依赖
在终端中进入项目的根目录,输入以下命令安装依赖。
npm install express passport passport-jwt jsonwebtoken body-parser
express
:用于创建 Web 服务器。passport
:用于处理用户身份验证。passport-jwt
:用于使用 JWT 进行身份验证。jsonwebtoken
:用于生成和解析 JWT。body-parser
:用于解析 HTTP 请求中的请求体。
创建应用
创建 app.js
文件,输入以下内容:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- ---------- - ---------------------- ----- -------- - ------------------- ----- ----------- - ----------------------- ----- --- - ----------------------- ----- --- - --------- ----- ----------- - -------------------- ----- ---------- - ---------------------- -- -- ----------- -- --- ----- ---------- - - --------------- ----------------------------------------- ------------ --------------- - ---------------- ----------------------- ------------ ----- -- - -- ---- -- ----- ------ - -------------- -- ------------- ----- ---- - - --- -- --------- ----------- --------- -------------------------------------------------------------- -- ----- -------- - -- ---------- -- ----- -- ------- --- ------- - ------ ---------- ----- - ---- - ------ ---------- ------ - --- -- -- ---- ------- -------------------------- -- ------ ------------------ ----- ---- -- - ----- - --------- -------- - - -------- -- ------------- ----- ---- - - --- -- --------- ----------- --------- -------------------------------------------------------------- -- ----- -------- - -- ------------ -- ----- -- ------------- --- -------- -- -------- --- ----------- - -- -- --- ----- ----- - ---------- ---- ------- -- ----------------------- ------ ---------- ----- -- - ---- - ------ -------------------------------- - -- -- ---------- --------------------- ---------------------------- - -------- ----- --- ----- ---- -- - ---------- -------- -------- -- -- -- -- --- --- ----- ---- - ---------------- -- ---- ---------------- -- -- - ---------------------- -- ---- --------- --
上面代码中,我们首先配置了 Passport.js 使用 JWT。然后,我们定义了两个处理请求的路由。
/login
:处理用户登录请求。首先验证用户名和密码是否正确,如果正确,就生成一个 JWT 并返回到客户端。如果验证不通过,就返回401 Unauthorized
错误。/protected
:处理需要进行身份验证的请求。使用 Passport.js 的authenticate
中间件来验证 JWT,如果验证通过,就返回受保护的资源。
测试
使用 curl
命令来模拟用户请求。
- 首先,我们先尝试通过
/login
接口获取 JWT。
-- -------------------- ---- ------- - ---- -- ---- - --------------------------- - -- -------------- ----------------- - -- -- ----------- ----------- ----------- ---------- -- --------------------------------------------------------------------------------------------------------------------------------
- 获取到 JWT 后,我们可以使用它来请求
/protected
接口。
$ curl -X GET \ http://localhost:3000/protected \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEsImlhdCI6MTYyOTU0MzI2OH0.CGeVlGJIpDPfU1KW6cRPXB6UbyVHjGp-8ZYrsVD_DZM' {"message":"受保护的资源"}
- 如果使用错误的 JWT,服务端会返回
401 Unauthorized
错误。
$ curl -X GET \ http://localhost:3000/protected \ -H 'Authorization: Bearer invalid-jwt' Unauthorized
结论
在本文中,我们介绍了如何使用 Express.js 实现登陆验证功能,使用了以下技术:
- JSON Web Token (JWT):一种身份验证和授权机制。
- Passport.js:一个 Node.js 的身份验证库。
- Express.js:一个流行的 Node.js 的 Web 服务框架。
通过本文的学习,你可以更好地保护你的网站和应用,提高用户的体验和安全性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66ffc606516dc8a7a16846a1