为什么当我登录系统并请求用户配置文件时,它总是只显示第一个添加的用户的配置文件,而不是登录的用户的配置文件?错误在哪里?
路线:
const express = require('express')
const router = express.Router()
const passport = require('passport')
const db = require("../config/db.config.js");
const User = db.users;
router.get('/get', passport.authenticate('jwt', { session: false }), (req,res) => {
const error = {};
User.findOne({user_id: req.user.user_id})
.then((profile) => {
if(!profile) {
return res.status('404').send(error);
}
res.send(profile)
})
.catch(err => {return res.status(400).send(err)});
});
module.exports = router
护照.js:
require('dotenv').config()
const JwtStrategy = require('passport-jwt').Strategy
const ExtractJwt = require('passport-jwt').ExtractJwt
const db = require("../config/db.config.js");
const User = db.users;
const opts = {
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: process.env.SECRET_OR_KEY,
}
module.exports = passport => {
passport.use(new JwtStrategy(opts, async (payload, done) => {
try {
const user = await User.findOne({user_id: payload.user_id})
if (user) {
done(null, user)
} else {
done(null, false)
}
} catch (e) {
console.log(e)
}
}))
}
您没有正确使用 findOne
方法。要应用过滤,您应该使用{where: {...}}
对象,请参见下文:
User.findOne({where: {user_id: req.user.user_id}});
如果没有where
sequelize 不会将您传递给筛选器的对象识别为筛选器,而只会从数据库返回第一条记录。请参阅此处的筛选示例。