繁体   English   中英

"访问 req.user 将 id 保存到 mongoDB"

[英]Access req.user to save id to mongoDB

我目前在弄清楚如何访问 req.user 时遇到问题,以便我可以获取登录的用户 ID 并将其与他们保存在网页上的项目一起保存。 这样,当他们加载网页时,他们只会得到他们的项目。 我知道我可以访问 req.user 的唯一地方是我的 \/router\/auth.js 文件。 我想找出一种在不同的路由器文件中访问它的方法。

路由器\/auth.js<\/strong>

const express = require('express');
const passport = require('passport');
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');

const config = require('../config');

const router = express.Router();

const createAuthToken = function (user) {
  return jwt.sign({ user }, config.JWT_SECRET, {
    subject: user.username,
    expiresIn: config.JWT_EXPIRY,
    algorithm: 'HS256'
  });
};

const localAuth = passport.authenticate('local', { session: false });
router.use(bodyParser.json());

router.post('/login', localAuth, (req, res) => {
  const authToken = createAuthToken(req.user.serialize());
  res.json({ authToken });
});

const jwtAuth = passport.authenticate('jwt', { session: false });

router.post('/refresh', jwtAuth, (req, res) => {
  const authToken = createAuthToken(req.user);
  res.json({ authToken });
});

您可以定义全局变量并通过中间件使用它。

app.js

// Global Vars
app.use(function (req, res, next) {
    res.locals.user = req.user
    next();
});

route.js

router.get('/', function(req, res) {
    CryptoPortfolio.find({}, function(err, crypto) {
        console.log('CryptoPortfolio : ',crypto);
        res.render('view/crypto', {
            user : res.locals.user   // <= here
        });
    });
});

我希望这会有所帮助:)

我发现我没有在任何必要的路线上使用下面的代码。 实现了它,现在我可以访问req.user了。

const jwtAuth = passport.authenticate('jwt', { session: false });

我也有这个问题。 当我使用 console.log(req.user.id) 或 console.log(req.user) 时。 它给了我null。

"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM