【问题标题】:Displays someone else's user profile显示其他人的用户资料
【发布时间】:2019-11-29 16:51:13
【问题描述】:

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

路线:

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

passport.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)
    }
  }))
}

【问题讨论】:

  • 你检查过你在payload.user_id得到了什么吗?

标签: node.js express sequelize.js passport.js


【解决方案1】:

您没有正确使用findOne 方法。要应用过滤,您应该使用{where: {...}} 对象,见下文:

User.findOne({where: {user_id: req.user.user_id}});

没有where sequelize 不会将您传递给过滤器的对象识别为过滤器,而只会从数据库中返回第一条记录。请参阅过滤示例here

【讨论】:

    猜你喜欢
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2016-06-26
    • 2019-06-30
    • 2019-09-18
    • 2021-09-04
    相关资源
    最近更新 更多