2015-09-11 10 views
6

私はパスポートを使用してAPIを保護しています。 私はエラーの場合にカスタムメッセージを返信する方法を理解するのに苦労しています。私はここで答えを見つけることを望んでいます。ここでパスポートを使用しているカスタムエラーメッセージベアラ

は私がやったことです:

ルート(server.js):

router.route('/Applications').get(authController.BearerAuthenticated, applicationController.getApplications); 

私のパスポートスタッフ(authController.js):

Passport.use(new BearerStrategy(function(token, cb) { 
Token.findOne({token: token}, function(err, token){ 
    if (err){return cb(null, false);} 
    if (!token) { return cb(null, false); } 
    return cb(null, token); 
}); 
})); 

exports.BearerAuthenticated = Passport.authenticate('bearer', {session: false}); 

私の申し込み方法(応用.js)

exports.getApplications = function(req, res) { 
Application.find({userId:req.user._id}, function(err, apps) { 
if (err) 
    res.send(err); 
res.json(apps); 
}); 
}; 

トークンが有効でベアラメソッドが返された場合

return cb(null, token); 

次に、私はgetApplicationsメソッドを入力できます。それは理にかなっている。

トークンが有効でない場合、私はメソッドを入力しません(意味があります)が、次のメッセージの代わりにカスタムメッセージをクライアントに返す方法を見つけることができませんデフォルトでは適切にユーザーが自分のトークンが死んでいるか、単に存在しないことを知らせるためにエラーコードでJSONを返すための方法だろう何

Unauthorized 

ありがとうございました。 :)

答えて

8

authenticateにコールバックを渡してそこからエラーを処理できます。この場合、ユーザーログインなどのデフォルト操作を手動で実行する必要があります。詳細はhereを参照してください。

exports.BearerAuthenticated = function(req, res, next){ 
    passport.authenticate('bearer', {session: false}, function(err, user, info) { 
     if (err) { return next(err); } 

     //authentication error 
     if (!user) { return res.json({error: info.message || 'Invalid Token'}) } 

     //success 
     req.logIn(user, function(err) { 
      if (err) { return next(err); } 
      return next(); 
     }); 

    })(req, res, next) 
} 
関連する問題