2015-09-11 22 views
6

Tôi đang sử dụng hộ chiếu để đảm bảo API của mình. Tôi loại cuộc đấu tranh để hiểu làm thế nào tôi là nghĩa vụ phải gửi lại tin nhắn tùy chỉnh trong trường hợp lỗi và tôi hy vọng sẽ tìm thấy một câu trả lời ở đây.Thông báo lỗi tùy chỉnh sử dụng hộ chiếu Bearer

Dưới đây là những gì tôi đã làm:

Một tuyến đường (server.js):

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

My Passport Stuff (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}); 

phương pháp ứng dụng của tôi (Application .js)

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

Nếu mã thông báo của tôi hợp lệ và phương thức Bearer trả lại

return cb(null, token); 

Sau đó, tôi có thể nhập phương thức getApplications của mình. Nó có ý nghĩa.

Điều là khi mã thông báo không hợp lệ, tôi không nhập phương thức (có ý nghĩa nữa) nhưng tôi không thể tìm ra cách trả lại thư tùy chỉnh cho khách hàng thay vì thông báo sau tôi nhận được theo mặc định.

Unauthorized 

Điều gì sẽ là cách trả lại Json với mã lỗi để người dùng biết rằng mã thông báo của mình đã chết hoặc đơn giản không tồn tại?

Cảm ơn bạn đã dành thời gian. :)

Trả lời

8

Bạn có thể chuyển một cuộc gọi lại trong authenticate và xử lý các lỗi từ đó. Lưu ý rằng trong trường hợp này, bạn phải tự thực hiện các thao tác mặc định như đăng nhập người dùng, v.v. Thêm vào nó trong 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) 
} 
Các vấn đề liên quan