显示其他人的用户配置文件



为什么当我登录系统并请求用户配置文件时,它总是只显示第一个添加的用户的配置文件,而不是登录的用户的配置文件?错误在哪里?

路线:

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 不会将您传递给筛选器的对象识别为筛选器,而只会从数据库返回第一条记录。请参阅此处的筛选示例。

最新更新