我是 Node.JS API创建的新手。我已经成功实现了使用 JWT 令牌的登录,并且我已经创建了一个文件来验证并通过 token 在标头中。
这是我的登录路线:-
SELECT t2.*
FROM (SELECT startswith FROM test1 ORDER BY RAND() LIMIT 1) t1
JOIN test2 t2 ON t2.text LIKE CONCAT(t1.startswith, '%')
为此,我在登录时创建了一个JSON响应:-
startswith
现在,我还创建了一个文件来检查用户的身份验证。 check-auth.js
router.post('/login' , (req, res, next) => {
User.find({email: req.body.email})
.exec()
.then(user => {
if(user.length < 1) {
return res.status(401).json({
message: "Auth failed. User not found."
})
}
bcrypt.compare(req.body.password, user[0].password, (err, result) =>{
if (err) {
return res.status(401).json({
message: "Auth failed. Check email and password"
});
}
if (result){
const adminEmail = "tom@xyz.com";
const role = user[0].email===adminEmail? "admin" : "user";
const token = jwt.sign(
{
email: user[0].email,
userId: user[0]._id,
role
},
process.env.JWT_KEY,
{
expiresIn : "1h"
});
return res.status(200).json({
message: "Auth Successful",
token : token
});
}
});
})
.catch(err =>{
if (err.code == 500)
res.status(500).send(["Something went wrong in login"]);
else
return next(err);
});
});
我需要用户登录,并且只能看到他们在注册过程中提供的详细信息。
注册路径:-
{
"message": "Auth Successful",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InRvbUB4eXouY29tIiwidXNlcklkIjoiNWMzMzI0MTgyNTg4M2I0Yzc0ODNkOGJjIiwicm9sZSI6InVzZXIiLCJpYXQiOjE1NDY5MzMwODYsImV4cCI60.zfRUQmg5K_mBU0Dkq72c0sgzFtCXvu8kObyvEflhg"
}
用户控制器:-
const jwt = require('jsonwebtoken');
module.exports = (req, rest, next) =>{
try{
const token = req.headers.authorization.split(" ")[1];
console.log(token);
const decoded = jwt.verify(token, process.env.JWT_KEY)
req.userData = decoded;
next();
}
catch(error){
return res.status(401).json({
message: "Auth failed"
});
}
};
在个人资料路径中,我需要在成功登录后显示注册详细信息:-
router.post('/register' , ctrlUser.register);
我在这里停留了一段时间。
答案 0 :(得分:1)
您可能希望获取登录的用户信息。
尝试以下代码
router.get('/profile', checkAuth, (req, res) =>{
//something to do.
// printing the user data
console.log(req.userData);
// sending the user data
res.send(req.userData)
});
在您的check-auth
中间件中,您已经放置了用户数据
req.userData = decoded;
因此您的userData
应该在路线上可用。
并且由于您使用用户mail
和id
来使jwt token
陷入犯罪,
它们将在userData
对象中可用。