Node-登录注册接口
登录注册接口
接下来我们在node 之中实现一个/api/login 登录接口,并且从数据库user表中校验用的账号和密码是否存在,存在返回token。
1、用户登录接口开发
(1) 登录接口编写尝试
接下来我们利用登录接口返回我们的token认证,我们做一个简单的模拟
// 用户登录接口
app.post('/api/login', (req, res) => {
let query = 'SELECT * FROM user';
// 登录失败
if (req.body.username !== 'admin' && req.body.password !== '123456') {
return res.send({
status: '400',
message: '登录失败'
})
}
// 登录成功
// 格式:jwt.sign({用户信息},密钥,token有效时长)
var tokenStr = jwt.sign({ username: req.body.username }, secretKey, { expiresIn: '2h' })
res.send({
status: 200,
message: '登录成功',
token: tokenStr
})
});
整个流程是这样子的:
请求接口,开始认证是否在白名单中
在白名单中,进行账号密码判断
失败=》返回信息
正确=》 jwt注册账号名,然后加密以后返回token
当我们输入正确的账号密码时:
{
"status": 200,
"message": "登录成功",
"token": "eyJXXXXXXXXXJ1c2VybmFtZSI6ImFkbW1uIiwiaWF0IjoxN"
}
错误时:
{
"status": 200,
"message": "登录成功",
"token": "eyJXXXXXXXXXJ1c2VybmFtZSI6ImFkbW1uIiwiaWF0IjoxN"
}
{
"status": "400",
"message": "登录失败"
}
这里遇到了一下小问题,写的判断居然市失效了,最后清理了一下缓存,重新优化一下判断
// 用户登录接口
app.post('/api/login', (req, res) => {
// let query = 'SELECT * FROM user';
console.log(req.body,'req');
console.log(req.body.username == 'admin');
console.log(req.body.password == '123456');
if (req.body.username == 'admin' && req.body.password == '123456') {
// 登录成功
console.log(111);
// 先制作jwt字符串 记住千万不要把密码加密到 token 字符串中,这样容易被人破解密码
// 格式:jwt.sign({用户信息},密钥,token有效时长)
var tokenStr = jwt.sign({ username: req.body.username }, secretKey, { expiresIn: '2h' })
res.send({
status: 200,
message: '登录成功',
token: tokenStr
})
}else{
// 登录失败
console.log(222);
res.send({
status: '400',
message: '登录失败'
})
}
});
ok! 问题成功解决!到这里我们的登录接口就已经开发成功了!
(2)数据库调用尝试
接下来我们先设置一个固定的账号密码进行一下调用尝试:
这里需要住的的是账号密码自己取的值部分从哪里来,一开始我经常混淆req.body和req.query的取值部分,这里可以都打印出来看看取值的部分,免得错误,然后怎么找也发现不了问题!
// 用户登录接口
app.post('/api/login', (req, res) => {
// let query = 'SELECT * FROM user';
console.log(req.body,'req');
console.log(req.body.username == 'admin');
console.log(req.body.password == '123456');
if (req.body.username == 'admin' && req.body.password == '123456') {
// 登录成功
console.log(111);
// 先制作jwt字符串 记住千万不要把密码加密到 token 字符串中,这样容易被人破解密码
// 格式:jwt.sign({用户信息},密钥,token有效时长)
var tokenStr = jwt.sign({username: req.body.username },secretKey, { expiresIn: '24h' })
res.send({
code: 200,
message: '登录成功',
token: tokenStr,
})
}else{
// 登录失败
console.log(222);
res.send({
code: '400',
message: '账号不存在!'
})
}
});
然后对返回结果进行查看,没问题:
{
"status": 200,
"message": "登录成功",
"token": "eyJhbxxxXVCJ9.eyJ1c2VybmFtZSI6ImFkbW1uIiwiaWF0IjoxN"
}
(3)数据库匹配账号密码
接下来从数据库里面查询我们的账号密码是否匹配
// 用户登录接口
app.post('/api/login', (req, res) => {
// let query = 'SELECT * FROM user';
// console.log(req.body,'req');
// console.log(req.body.username == 'admin');
// console.log(req.body.password == '123456');
const { username, password } = req.body;
// if (req.body.username == 'admin' && req.body.password == '123456') {}
let sql='SELECT * FROM user WHERE username = ?';
// 查询数据库中是否存在匹配的用户名
connectionpool.query(sql,[username],(error, results) => {
if (error) throw error;
// 检查查询结果是否为空
if (results.length === 0) {
return res.status(401).json({ message: '用户名不存在' });
}
console.log(results[0].passward,'results-passward');
console.log('password',password);
// const user = results[0];
if(results[0].passward==password){
var tokenStr = jwt.sign({username: req.body.username },secretKey, { expiresIn: '24h' });
console.log('登录成功');
res.send({
code: 200,
message: '登录成功',
token: tokenStr,
})
}else{
console.log('登录失败',user.password,password);
return res.status(401).json({ message: '密码不正确',code:401 });
}
}
);
});
成功时候给与我们的提示:
{
"status": 200,
"message": "登录成功",
"token": "eyJhbxxxXVCJ9.eyJ1c2VybmFtZSI6ImFkbW1uIiwiaWF0IjoxN"
}
失败时候给与我们的提示:
{
"code": 500,
"message": "密码不正确"
}
2、用户注册接口开发
(1)接口开发和思考
先起个名:(用户注册接口名称为)'/api/register'
思考
用户的注册其实本质上不就是新用户的增加吗,所以我们这里其实本质上也是直接对于用户的一个增加,这里我们只需要将用户增加的接口迁移过来即可
这里需要注意的点就是:我们在增加直接应该先去数据库里面看一下用户是否已经存在,如果存在的话,那我们就应该让用户重新拟定自己的昵称,避免和数据库之中的重复!
先来看看我们数据库的指令需要什么
// 查询用户
SELECT * FROM user WHERE username = admin
//添加用户
INSERT INTO user (name,username, password,state) VALUES (?,?,?,1)
接下来我们开始写一个注册用户的接口
// 用户注册接口
app.post('/api/register', (req, res) => {
console.log(req.body,'req');
const { username, password } = req.body;
let sql='SELECT * FROM user WHERE username = admin';
// 查询数据库中是否存在匹配的用户名
connectionpool.query(sql,[username],(error, results) => {
// console.log(results,'查询结果!');
if (error) throw error;
const name=username;
const values = [name,username, password];
// 准备 SQL 插入语句
const insertSql = ``;
connectionpool.query(insertSql, values, (err, results) => {
console.log(results,'results-插入结果!');
if (err) {
console.error('Error querying database:', err);
res.status(500).json({ error: 'Internal server error' });
}
res.json({
code: '200',
);
});
}
);
});
(2)优化存在用户的情况
完善添加一下是否添加的用户已经跟数据库里面的用户重复的情况
// 用户注册接口
app.post('/api/register', (req, res) => {
console.log(req.body,'req');
const { username, password } = req.body;
let sql='SELECT * FROM user WHERE username = ?';
// 查询数据库中是否存在匹配的用户名
connectionpool.query(sql,[username],(error, results) => {
// console.log(results,'查询结果!');
if (error) throw error;
// 检查查询结果是否为空
if (results.length !== 0) {
res.json({
code: 401,
data: results,
message:'用户名已经存在!'
});
}else{
const name=username;
const values = [name,username, password];
// 准备 SQL 插入语句
const insertSql = `INSERT INTO user (name,username, password,state) VALUES (?,?,?,1)`;
connectionpool.query(insertSql, values, (err, results) => {
console.log(results,'results-插入结果!');
if (err) {
console.error('Error querying database:', err);
res.status(500).json({ error: 'Internal server error' });
return;
}
res.json({
code: '200',
data: results,
message:'用户注册成功,欢迎你去登陆!'
});
});
}
}
);
});
测试成功 ! 当用户注册成功的时候,用户应该去进行登陆!
- 点赞
- 收藏
- 关注作者
评论(0)