上一节成功之后返回的是success,我们希望返回token,需要引入第三方jsonwebtoken
那什么是token呢:点击了解详情
token在计算机身份认证中是令牌(临时)的意思,可以看作是暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。
1、安装jsonwebtoken
npm install jsonwebtoken
2、routes/api/users.js引入
const jwt = require('jsonwebtoken');
3、登录接口成功那里用jwt
jwt.sign("规则","加密名字","过期时间","箭头函数")
4、自己定义规则
const rule = {id:user.id,name:user.name};
5、加密名字
- 在config/keys.js里面加入
secretOrKey:"secret"
- 在../api/users.js里面引入
const keys = require("../../config/keys");
- 将jwt.sign中的加密名字替换成
keys.secretOrKey
6、设置过期时间
将jwt.sign中的过期时间设置为1小时(根据自己情况设置) {expiresIn:3600}
7、设置箭头函数
//最后的login接口
router.post("/login", (req, res) => {
const email = req.body.email;
const password = req.body.password;
//查询数据库
User.findOne({
email
})
.then(user => {
if (!user) {
return res.json({
email: "用户不存在"
}); //return res.status(404).json({email:"用户不存在"});
}
//密码匹配 使用token
bcrypt.compare(password, user.password)
.then(isMatch => {
if (isMatch) {
const rule = {
id: user.id,
name: user.name
};
//用id和name来做一个token
// jwt.sign("规则", "加密名字", "过期时间", "箭头函数");
jwt.sign(rule, keys.secretOrKey, {
expiresIn: 3600
}, (err, token) => {
if (err) {
throw err
};
res.json({
success: true,
token: "dj" + token
//返回一个固定值+taken规则的的token
});
})
// res.json({msg:"success"});
} else {
return res.json({
password: "密码错误!"
});
//return res.status(400).json({password:"密码错误!"});
}
})
})
})
8、用postman测试接口(输入一个存在的账号)