2016-07-12 3 views
3

これは私の最初の急行アプリです。いくつかのルートの認証を実装しようとしています。理想的には、ユーザーが認証されていない場合、ユーザーはホームページにリダイレクトされます。だから私はこのミドルウェアを書いた:express-jwtを使用して認証されていないユーザーにリダイレクトする方法

var jwt = require('express-jwt'); 

app.get('/protected', 
    jwt({secret: 'shhhhhhared-secret'}),  //express-jwt middleware 
    function(req, res, next) {    //redirection middleware 
    if(!req.user._id){ 
     console.log('authentication failed') 
     res.redirect('/home') 
    }else{ 
     next() 
    }; 
    }); 

ユーザーがログインしている場合、コードは動作します。ただし、ユーザーがログインしていない場合、ブラウザーには401許可されていないエラーが表示されます。リダイレクトはありません。このプロセスはexpress-jwtミドルウェアで失敗し、リダイレクトミドルウェアに移行しませんでした。

jwt関数内で設定する必要のある設定はありますか?または、401に遭遇した場合にグローバルリダイレクションを設定する方法はありますか?

答えて

4

ユーザーが認証されていないとエラーがスローされ、node.jsがコードの実行を停止します。その後あなたは特急エラーハンドラでそれをキャッチすることができるだろう:

app.use(function(err, req, res, next) { 
    if(401 == err.status) { 
     res.redirect('/home') 
    } 
    }); 
+0

このコードは、認証ミドルウェアの前または後に置くことになっていますか? – Sydney

+0

このミドルウェアは最後のものでなければなりません。他の場合は他のエラーを処理することを忘れないでください。あなたは、SMSまたはエラーの説明付きの電子メールを送信することも、データベースに保存することもできます。 –

関連する問題