下面是详细讲解如何快速搭建Node.js(Express)用户注册、登录以及授权的方法的攻略,包含以下内容:
- 环境准备
- 安装Express和必要插件
- 用户注册与登录功能实现
- 授权功能实现
1. 环境准备
在开始搭建之前,需要准备好Node.js环境和编辑器,推荐使用最新版Node.js和Visual Studio Code编辑器。
2. 安装Express和必要插件
在项目根目录下,通过npm安装Express:
npm install --save express
安装数据库相关插件,比如mongodb:
npm install --save mongoose
安装密码加密插件bcrypt:
npm install --save bcrypt
安装JSON Web Token插件jsonwebtoken:
npm install --save jsonwebtoken
3. 用户注册与登录功能实现
用户模型设计
在models目录下创建用户模型user.js,并设计用户模型,代码如下:
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const saltRounds = 10;
const userSchema = new mongoose.Schema({
username: { type: String, required: true, unique: true },
password: { type: String, required: true },
});
userSchema.pre('save', function (next) {
const user = this;
bcrypt.hash(user.password, saltRounds, (err, hash) => {
if (err) {
return next(err);
}
user.password = hash;
next();
});
});
module.exports = mongoose.model('User', userSchema);
用户注册与登录实现
在routes目录下创建用户注册和登录路由user.js,代码如下:
const express = require('express');
const jwt = require('jsonwebtoken');
const router = express.Router();
const User = require('../models/user');
// 用户注册
router.post('/register', (req, res) => {
const { username, password } = req.body;
const user = new User({ username, password });
user.save((err) => {
if (err) {
return res.status(400).send('用户注册失败');
}
res.send('用户注册成功');
});
});
// 用户登录
router.post('/login', (req, res) => {
const { username, password } = req.body;
User.findOne({ username }, (err, user) => {
if (err || !user) {
return res.status(400).send('用户名或密码错误');
}
user.comparePassword(password, (err, isMatch) => {
if (err || !isMatch) {
return res.status(400).send('用户名或密码错误');
}
const token = jwt.sign({ id: user._id }, 'jsonwebtoken_secret');
res.cookie('token', token, { httpOnly: true });
res.send('用户登录成功');
});
});
});
module.exports = router;
4. 授权功能实现
在middlewares目录下创建auth.js,实现授权功能,代码如下:
const jwt = require('jsonwebtoken');
module.exports = (req, res, next) => {
const token = req.cookies.token;
if (!token) {
return res.status(401).send('认证失败,无法访问该接口');
}
try {
const decoded = jwt.verify(token, 'jsonwebtoken_secret');
req.user = decoded;
next();
} catch (err) {
return res.status(401).send('认证失败,无法访问该接口');
}
};
在应用中使用该中间件进行路由授权,代码如下:
const express = require('express');
const app = express();
const cookieParser = require('cookie-parser');
const auth = require('./middlewares/auth');
const user = require('./routes/user');
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use('/user', user); // 用户模块
app.use(auth); // 授权
app.listen(8080, () => {
console.log('server is running on port 8080');
});
示例1:用户注册
调用/user/register接口,传入参数{"username":"testuser","password":"testpassword"},成功返回"用户注册成功"。
示例2:用户登录
调用/user/login接口,传入参数{"username":"testuser","password":"testpassword"},成功返回"用户登录成功"并设置httpOnly的token Cookie。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:快速搭建Node.js(Express)用户注册、登录以及授权的方法 - Python技术站