2016-11-11 6 views
0

パスポートとOAuthを使用して自分のサイトのユーザーを認証しています。ユーザーがOAuthでログインしていて、許可されているユーザーの一覧に含まれているかどうかを確認するためにミドルウェアを作成しました。ミドルウェアは機能し、許可されていない場合に使用されるデータルートにユーザーがアクセスするのを防ぎます。問題は、レスポンスがリスト内のユーザーを見つけられなかった後にSequelize catchハンドラで呼び出されることはないということです。失敗した場合はリダイレクトされず、データのないページが表示されます。Sequelize catchハンドラで高速応答が実行されない

ここは私のミドルウェアです。私はcatchに到達していることを知っています。console.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;

答えて

関連する問題