在网站和应用程序开发中,用户认证是一个必不可少的部分。本文将介绍如何使用 Express.js、passport 和 JWT 实现用户认证,让您的应用程序更安全、更可靠。
什么是 Passport?
Passport 是一个 Node.js 的用户认证库,它提供了一种易于使用和灵活的方式来处理用户身份验证和授权。它支持多种身份验证策略,包括用户名和密码、OAuth、OpenID 等。
什么是 JWT?
JWT(JSON Web Token)是一种用于信息交换的开放标准,它可以安全地将声明(例如用户身份信息)存储在 Token 中。这些 Token 是由服务器签署的,并且由于服务器具有它们的签名密钥,因此可以验证它们。
如何使用 Express.js、passport 和 JWT 实现用户认证?
下面是一个使用 Express.js、passport 和 JWT 实现用户认证的示例:
1. 安装依赖项
使用 npm 安装以下依赖项:
npm install express passport passport-local jsonwebtoken passport-jwt bcrypt
2. 配置应用程序
在你的应用程序中,你需要配置和初始化 Passport、JSON Web Token 和 bcrypt:
// javascriptcn.com 代码示例 const express = require('express'); const passport = require('passport'); const passportJWT = require('passport-jwt'); const bcrypt = require('bcrypt'); const jwt = require('jsonwebtoken'); const LocalStrategy = require('passport-local').Strategy; const JWTStrategy = passportJWT.Strategy; const ExtractJWT = passportJWT.ExtractJwt; const app = express(); // 配置 passport app.use(passport.initialize()); // 配置 bcrypt const saltRounds = 10; // 配置 JSON Web Token const jwtSecret = 'mysecretkey'; // 配置本地策略 passport.use(new LocalStrategy({ usernameField: 'email', passwordField: 'password' }, function (email, password, cb) { return User.findOne({email}) .then(user => { if (!user || !bcrypt.compareSync(password, user.password)) { return cb(null, false, {message: 'Incorrect email or password.'}); } return cb(null, user, {message: 'Logged In Successfully'}); }) .catch(err => cb(err)); } )); // 配置 JWT 策略 passport.use(new JWTStrategy({ jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(), secretOrKey: jwtSecret }, function (jwtPayload, cb) { return User.findById(jwtPayload.id) .then(user => { return cb(null, user); }) .catch(err => { return cb(err); }); } ));
3. 添加用户认证路由
下面是一个使用 JSON Web Token 和 Passport 进行用户认证的路由处理程序示例:
// javascriptcn.com 代码示例 // 路由处理程序 app.post('/login', function (req, res, next) { passport.authenticate('local', {session: false}, function (err, user, info) { if (err || !user) { return res.status(400).json({ message: 'Incorrect email or password.', user: user }); } req.login(user, {session: false}, function (err) { if (err) { res.send(err); } const token = jwt.sign({id: user._id}, jwtSecret); return res.json({user, token}); }); })(req, res, next); }); app.get('/profile', passport.authenticate('jwt', {session: false}), (req, res) => { res.json(req.user); });
4. 测试用户认证
现在你可以测试你的用户认证功能了。使用以下命令启动应用程序:
node app.js
然后使用 cURL 或 Postman 发送 POST 请求:
curl -X POST \ http://localhost:3000/login \ -H 'Content-Type: application/json' \ -d '{ "email": "user@example.com", "password": "password" }'
如果认证成功,你将得到一个 JSON Web Token。使用以下命令发送 GET 请求:
curl -X GET \ http://localhost:3000/profile \ -H 'Authorization: Bearer <your_token>'
如果 JSON Web Token 有效,你将得到用户信息的 JSON 数据。
总结
使用 Express.js、passport 和 JWT 实现用户认证并不难。使用上面的示例代码,你可以快速和简单地添加用户认证和授权功能到你的应用程序中。现在你可以放心地部署你的应用程序了!
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65335c767d4982a6eb6e11ba