Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在刷新节点上丢失会话_Node.js_Reactjs_Express - Fatal编程技术网

Node.js 在刷新节点上丢失会话

Node.js 在刷新节点上丢失会话,node.js,reactjs,express,Node.js,Reactjs,Express,我正在学习Udemy的教程,并使用node和express创建一个react应用程序。我正在丢失会话并在刷新时被发送回登录页面。讲师应用程序在刷新时保持会话状态。路由错误是否会导致此问题?我将从路由文件夹中提供auth.js文件。如果需要,我可以添加更多 > > 以防万一,这是路由文件夹中的auth.js文件 const express = require('express'); const router = express.Router(); const bcrypt = require('b

我正在学习Udemy的教程,并使用node和express创建一个react应用程序。我正在丢失会话并在刷新时被发送回登录页面。讲师应用程序在刷新时保持会话状态。路由错误是否会导致此问题?我将从路由文件夹中提供auth.js文件。如果需要,我可以添加更多

>

>

以防万一,这是路由文件夹中的auth.js文件

const express = require('express');
const router = express.Router();
const bcrypt = require('bcryptjs');
const auth = require('../../middleware/auth');
const jwt = require('jsonwebtoken');
const config = require('config');
const { check, validationResult } = require('express-validator');

const User = require('../../models/User');

// @route    GET api/auth
// @desc     Test route
// @access   Public
router.get('/', auth, async (req, res) => {
  try {
    const user = await User.findById(req.user.id).select('-password');
    res.json(user);
  } catch (err) {
    console.error(err.message);
    res.status(500).send('Server Error');
  }
});

// @route    POST api/auth
// @desc     Authenticate user & get token
// @access   Public
router.post(
  '/',
  [
    check('email', 'Please include a valid email').isEmail(),
    check('password', 'Password is required').exists()
  ],
  async (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }

    const { email, password } = req.body;

    try {
      let user = await User.findOne({ email });

      if (!user) {
        return res
          .status(400)
          .json({ errors: [{ msg: 'Invalid Credentials' }] });
      }

      const isMatch = await bcrypt.compare(password, user.password);

      if (!isMatch) {
        return res
          .status(400)
          .json({ errors: [{ msg: 'Invalid Credentials' }] });
      }

      const payload = {
        user: {
          id: user.id
        }
      };

      jwt.sign(
        payload,
        config.get('jwtSecret'),
        { expiresIn: 360000 },
        (err, token) => {
          if (err) throw err;
          res.json({ token });
        }
      );
    } catch (err) {
      console.error(err.message);
      res.status(500).send('Server error');
    }
  }
);

module.exports = router;

为auth显示的代码只返回一个令牌。该令牌必须与头
x-auth-token
中的任何未来请求一起发送回,以使您的身份验证生效。这种情况不会发生在浏览器页面上(从您提到“刷新”开始,您就一直在使用这个页面)。此特定技术需要将令牌放入cookie中(浏览器将在每次请求时发回cookie),并在其中检查它以验证身份验证,或者此代码仅用于编程访问,而不用于浏览器访问。我不确定您的任务实际上是什么,以了解您试图完成什么。您为auth显示的代码只返回一个令牌。该令牌必须与头
x-auth-token
中的任何未来请求一起发送回,以使您的身份验证生效。这种情况不会发生在浏览器页面上(从您提到“刷新”开始,您就一直在使用这个页面)。此特定技术需要将令牌放入cookie中(浏览器将在每次请求时发回cookie),并在其中检查它以验证身份验证,或者此代码仅用于编程访问,而不用于浏览器访问。我不确定你的任务到底是什么,你想完成什么。
const jwt = require('jsonwebtoken');
const config = require('config');

module.exports = function(req, res, next) {
  // Get token from header
  const token = req.header('x-auth-token');

  // Check if not token
  if (!token) {
    return res.status(401).json({ msg: 'No token, authorization denied' });
  }

  // Verify token
  try {
    const decoded = jwt.verify(token, config.get('jwtSecret'));

    req.user = decoded.user;
    next();
  } catch (err) {
    res.status(401).json({ msg: 'Token is not valid' });
  }
};
const express = require('express');
const router = express.Router();
const bcrypt = require('bcryptjs');
const auth = require('../../middleware/auth');
const jwt = require('jsonwebtoken');
const config = require('config');
const { check, validationResult } = require('express-validator');

const User = require('../../models/User');

// @route    GET api/auth
// @desc     Test route
// @access   Public
router.get('/', auth, async (req, res) => {
  try {
    const user = await User.findById(req.user.id).select('-password');
    res.json(user);
  } catch (err) {
    console.error(err.message);
    res.status(500).send('Server Error');
  }
});

// @route    POST api/auth
// @desc     Authenticate user & get token
// @access   Public
router.post(
  '/',
  [
    check('email', 'Please include a valid email').isEmail(),
    check('password', 'Password is required').exists()
  ],
  async (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }

    const { email, password } = req.body;

    try {
      let user = await User.findOne({ email });

      if (!user) {
        return res
          .status(400)
          .json({ errors: [{ msg: 'Invalid Credentials' }] });
      }

      const isMatch = await bcrypt.compare(password, user.password);

      if (!isMatch) {
        return res
          .status(400)
          .json({ errors: [{ msg: 'Invalid Credentials' }] });
      }

      const payload = {
        user: {
          id: user.id
        }
      };

      jwt.sign(
        payload,
        config.get('jwtSecret'),
        { expiresIn: 360000 },
        (err, token) => {
          if (err) throw err;
          res.json({ token });
        }
      );
    } catch (err) {
      console.error(err.message);
      res.status(500).send('Server error');
    }
  }
);

module.exports = router;