探究“一网通办平台”背后的源码实现
张三(开发工程师): 李四,最近我们团队负责的“一网通办平台”项目进展如何?
李四(项目经理): 进展顺利,我们已经完成了大部分功能模块的开发。不过我有一个问题想请教,就是关于用户登录认证这部分的源码实现。
张三: 好的,我来给你讲一下。我们使用的是JWT(JSON Web Token)进行用户身份验证,这是核心的代码段:
const jwt = require('jsonwebtoken');
function generateToken(user) {
return jwt.sign({ userId: user.id }, 'secret_key', { expiresIn: '1h' });
}
]]>
李四: 明白了,那么在前端请求后端API时,又是如何传递这个token的呢?
张三: 我们使用HTTP头部中的Authorization字段来传递token。这部分代码是这样的:
axios.defaults.headers.common['Authorization'] = `Bearer ${localStorage.getItem('token')}`;
]]>
李四: 明白了。那么在后端处理这些请求时,是如何验证这个token的呢?
张三: 在后端,我们定义了一个中间件来验证每个请求是否携带有效的token,并且从中提取出用户信息。这部分代码如下:
const verifyToken = (req, res, next) => {
const token = req.headers.authorization.split(' ')[1];
if (!token) return res.status(403).send({ auth: false, message: 'No token provided.' });
jwt.verify(token, 'secret_key', (err, decoded) => {
if (err) return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' });
req.userId = decoded.userId;
next();
});
};
]]>
李四: 看起来很清晰了,那我们的数据库设计是怎样的呢?
张三: 我们使用MySQL作为主要的数据存储系统。用户表包含基本信息和一个用于存储token的字段。这是一个简化的SQL语句:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
token VARCHAR(255)
);
]]>
李四: 谢谢你的详细解释,这对我们后续的功能扩展和优化有很大帮助。
本站知识库部分内容及素材来源于互联网,如有侵权,联系必删!