未在 Sequelize catch 处理程序中执行的表达式响应

Express response not executing in Sequelize catch handler

本文关键字:执行 表达式 响应 程序 Sequelize catch 处理 未在      更新时间:2023-09-26

我正在使用护照和OAuth对我网站上的用户进行身份验证。我已经制作了中间件来检查用户是否使用 OAuth 登录以及他们是否在允许的用户列表中。中间件工作,如果用户未获得授权,则阻止用户访问使用它的数据路由。问题是,在无法在列表中找到用户后,永远不会在 Sequelize catch 处理程序中调用响应,因此如果响应失败并且仅显示没有数据的页面,则永远不会重定向它们。

这是我的中间件。我知道正在达到catch,因为我可以看到控制台.log,但res.status('401').redirect(/admin/login );永远不会发生。让我知道代码的其他部分是否有有用的内容。提前感谢您的所有帮助!

'use strict';
const clc = require(`cli-color`);
const models = require('../models');
const User = models.User;
function isLoggedIn(req, res, next) {
  console.log(clc.red.bgBlue(` ::: `), req.user);
  res.header('Access-Control-Allow-Credentials', true);
  models.sql.sync()
    .then(() => {
      User.findOne({
        where: {
          email: req.user.unique_name
        }
      });
    })
    .then((user) => {
      if (req.isAuthenticated() && user !== null && user.email === req.user.unique_name) { // if user is authenticated in the session and the user email matches the user found in the db, carry on
        return next();
      } else {
        // if they aren't send not authorized
        res.status('401').redirect(`/admin/login`);
      }
    })
    .catch((err) => {
      console.log(clc.red.bgWhite(`ERR  ::::  )`), err);
      res.status(`401`).redirect(`/admin/login`);
    });
}
module.exports = isLoggedIn;

根据文档,正确的语法是:

res.redirect(401, 'http://example.com');

另请参阅:将快递.js 4 的 res.status(401( 链接到重定向