我有一个简单的应用程序,用户可以在他的acc中注册和登录,现在我想在页面上显示用户登录,我如何从db中获得关于现在认证的用户的数据
使用mongodb和moongoose作为数据库
这个寄存器系统
router.post('/register',async (req,res)=>{
const {login,mail,password} = req.body
bcrypt.hash(password, 10).then((hash) =>{
User({login:login,password:hash,mail:mail}).save()
})
res.redirect('/login')
})
这是登录系统
router.post('/',async (req,res)=>{
const {mail, password } = req.body
const user = req.body
console.log(user)
const isUserExist = await User.findOne({mail:mail})
const UserPwdCorrect = isUserExist.password
if(!isUserExist){
console.log('Логин гавно')
} else{
bcrypt.compare(password,UserPwdCorrect).then((match)=>{
if(!match){
console.log("Пароль говно")
} else{
const accessToken = createToken(user)
res.cookie("token",accessToken,{
maxAge:60*60*24*30*1000
})
res.redirect('/')
}
})
}
})
这是我在jwt.js文件
中做的const {sign,verify} = require("jsonwebtoken")
const createToken = (user) =>{
const accessToken = sign({login: user.login, isAdmin:user.idAdmin,id:user.id},"jwt-secret")
return accessToken
}
const validateToken = (req,res,next) =>{
const accessToken = req.cookies["token"]
console.log(accessToken)
if(accessToken){
try {
const validtoken = verify(accessToken,"jwt-secret")
if(validtoken){
req.authenticated = true
return next()
} else{
return next()
}
} catch(err){
console.log(err)
}
}
}
这里有一个解决方案:
在JWT令牌中传递userID。当用户单击配置文件页面时,将POST请求发送到接受令牌的端点(在标头中)。后端验证令牌,提取userID,进行DB调用,最后返回响应。
这种方法的优点是您的配置文件路由是经过身份验证的(即,路由是安全的)。