上一節(jié)成功之后返回的是success,我們希望返回token,需要引入第三方jsonwebtoken
那什么是token呢:點(diǎn)擊了解詳情
token在計(jì)算機(jī)身份認(rèn)證中是令牌(臨時(shí))的意思,可以看作是暗號(hào),在一些數(shù)據(jù)傳輸之前,要先進(jìn)行暗號(hào)的核對(duì),不同的暗號(hào)被授權(quán)不同的數(shù)據(jù)操作。
1、安裝jsonwebtoken
npm install jsonwebtoken
2、routes/api/users.js引入
const jwt = require('jsonwebtoken');
3、登錄接口成功那里用jwt
jwt.sign("規(guī)則","加密名字","過(guò)期時(shí)間","箭頭函數(shù)")
4、自己定義規(guī)則
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、設(shè)置過(guò)期時(shí)間
將jwt.sign中的過(guò)期時(shí)間設(shè)置為1小時(shí)(根據(jù)自己情況設(shè)置) {expiresIn:3600}
7、設(shè)置箭頭函數(shù)
//最后的login接口
router.post("/login", (req, res) => {
const email = req.body.email;
const password = req.body.password;
//查詢數(shù)據(jù)庫(kù)
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來(lái)做一個(gè)token
// jwt.sign("規(guī)則", "加密名字", "過(guò)期時(shí)間", "箭頭函數(shù)");
jwt.sign(rule, keys.secretOrKey, {
expiresIn: 3600
}, (err, token) => {
if (err) {
throw err
};
res.json({
success: true,
token: "dj" + token
//返回一個(gè)固定值+taken規(guī)則的的token
});
})
// res.json({msg:"success"});
} else {
return res.json({
password: "密碼錯(cuò)誤!"
});
//return res.status(400).json({password:"密碼錯(cuò)誤!"});
}
})
})
})
8、用postman測(cè)試接口(輸入一個(gè)存在的賬號(hào))

測(cè)試結(jié)果