2013-02-03 14 views
6

Tôi thấy rằng done() phương pháp (hoặc success(), như đã nói bởi trình gỡ lỗi của tôi) có một đối số thứ ba cũng được gọi là info. Ai có thể cho tôi biết điều gì xảy ra với giá trị được chuyển vào nó?Node.js + Hộ chiếu: Điều gì sẽ xảy ra với đối số thứ 3 'thông tin' trong phương thức done()?

EDIT

Các done() phương pháp tôi đề cập đến là một trong những chúng ta phải gọi trong một callback chiến lược. ví dụ.

var passport = require('passport') 
    , LocalStrategy = require('passport-local').Strategy; 

passport.use(new LocalStrategy(
    function(username, password, done) { 
    User.findOne({ username: username }, function (err, user) { 
     if (err) { return done(err); } 
     if (!user) { 
     return done(null, false, { message: 'Incorrect username.' }); 
     } 
     if (!user.validPassword(password)) { 
     return done(null, false, { message: 'Incorrect password.' }); 
     } 
     return done(null, user); 
    }); 
    } 
)); 

Đoạn mã từ here. Như có thể thấy, trong một số trường hợp, một số message đang được chuyển trong một đối tượng làm đối số thứ ba cho done(). Làm thế nào chúng ta có thể truy cập vào message này trong một phương pháp định tuyến?

+0

Vui lòng hiển thị một số mã mẫu hoặc chỉ cho chúng tôi đi đúng hướng. Đây là một chút mơ hồ. Ngoài ra, tôi thấy bạn đã gắn thẻ nó, nhưng câu hỏi của bạn không bao giờ đề cập đến hộ chiếu, vì vậy tôi mất một lúc để nhận ra những gì bạn đang hỏi. – loganfsmyth

+0

Cảm ơn bạn đã chỉ ra @loganfsmyth! Tôi đã cập nhật q, xin vui lòng cho tôi biết nếu nó cần giải thích thêm. – craftsman

+0

Bạn có thể cho biết cách bạn đang gọi phần mềm trung gian không? – loganfsmyth

Trả lời

8

Bạn sẽ có thể truy cập thông tin được truyền dưới dạng tham số thứ ba là req.authInfo.

Bạn có thể xem việc xử lý hereinfo, nơi được gán cho authInfo và được sử dụng cho tin nhắn flash.

5

info là đối số tùy chọn có thể chứa thông tin người dùng bổ sung, chẳng hạn như vai trò, hồ sơ người dùng hoặc ủy quyền, có thể đã được xác định trong chức năng xác minh. Điều này giúp với các chiến lược xác thực của bên thứ ba, vì các chi tiết về người dùng được xác thực này có thể được chuyển cùng một khi người dùng được xác thực thành công. Nếu không, bạn có thể phải tìm kiếm chúng lần thứ hai sau đó, điều đó không hiệu quả.

Và như loganfsmyth chỉ ra, info được đặt tại req.authInfo để middlware hoặc tuyến đường có thể truy cập sau này.

Ngoài ra, bạn có thể chuyển đổi các đối tượng thêm tác thông tin bằng cách registering the transformAuthInfo, như thế này:

passport.transformAuthInfo(function(info, done) { 
    Client.findById(info.clientID, function (err, client) { 
    info.client = client; 
    done(err, info); 
    }); 
}); 

Đối LocalStrategy, bạn có thể see in the verified function rằng thông tin được thông qua cho cả hai thất bại và hành động thành công.

Vì vậy, ngoài ra, bạn có thể chỉ định một thuộc tính typemessage và các thuộc tính này sẽ được sử dụng trong thông báo trạng thái flash được hiển thị cho người dùng. (type mặc định thành 'thành công' khi người dùng được xác thực và 'lỗi' ngược lại).

Tin nhắn flash hoạt động trong Express 2.x thông qua hàm request.flash(). Điều này đã bị xóa trong Express 3.x - connect-flash phần mềm trung gian được khuyến nghị nếu bạn cần chức năng này.