2017-04-06 19 views
6

(Tôi đã làm fbStrategy.passReqToCallback = true) Tôi đang tắt https://scotch.io/tutorials/easy-node-authentication-linking-all-accounts-together nhưng muốn sử dụng dịch vụ xác thực xã hội này cho nhiều ứng dụng, ví dụ: bật các sprinkler, vvCách chuyển thông số bổ sung vào hộ chiếu.authenticate

Về cơ bản nếu một trong các ứng dụng này kiểm tra với máy chủ và không có mã thông báo chính xác, nó sẽ được chuyển hướng đến dịch vụ xác thực xã hội này (social-auth). Khi người dùng nhấn vào các nút đăng nhập xã hội nó lấy tham số của những gì ứng dụng đến từ và thêm nó như là một tham số cho /auth/facebook/:appid

// send to facebook to do the authentication 
    app.get('/auth/facebook/:appId', function(req,res,next){ 
     passport.authenticate(
      'facebook', { scope : 'email' } 
     )(req,res,next); 
    }); 

req của req,res,next là hồ sơ người dùng serialized. Tại thời điểm này, xã hội-auth không biết người dùng là ai.

fbStrategy.passReqToCallback = true; 
passport.use(new FacebookStrategy(fbStrategy, 
    function(req, token, refreshToken, profile, done) { 
     var email = (profile.emails[0].value || '').toLowerCase()  
     process.nextTick(function() {... 

Sau khi ủy quyền hoàn tất tôi muốn chuyển hướng trở lại với ứng dụng gọi điện thoại và tôi cần :appId param để đi xe cùng để tôi có thể quay trở lại trang web đúng. Bây giờ nói chung nó sẽ hoạt động nếu tôi chỉ thực hiện một biến như currentAppId truy cập vào các chiến lược xã hội khác nhau nhưng nếu bạn tình cờ có nhiều người xác thực cùng một lúc thì bạn có thể có một người dùng quay lại ứng dụng sai hoặc một số ứng dụng người dùng khác. Đó là lý do tại sao tôi cần appId để chuyển sang tham số là passport.authenticate. Tôi nên tìm cách để tìm ra cách. Tôi có thể bọc passport.authenticate hoặc sửa đổi mọi thứ không?

Trả lời

2

Bạn có thể tự sử dụng yêu cầu để chuyển một số thông số bổ sung từ và sang chức năng chiến lược. Trong ví dụ sau, hai tham số _toParam_fromParam được sử dụng cho mối quan tâm này.

app.get('/auth/facebook/:appId', function(req,res,next){ 
    req._toParam = 'Hello'; 
    passport.authenticate(
     'facebook', { scope : 'email' } 
    )(req,res,next); 
}) 


fbStrategy.passReqToCallback = true; 
passport.use(new FacebookStrategy(fbStrategy, 
    function(req, token, refreshToken, profile, done) { 
     console.log(req._toParam); 
     req._fromParam = 'Hello 2'; 
     var email = (profile.emails[0].value || '').toLowerCase()  
    process.nextTick(function() {... 

Nếu bạn cần lưu trữ id để yêu cầu thêm, bạn có thể sử dụng bản đồ với ổ cắm của yêu cầu hiện tại làm khóa.

+0

Rực rỡ, cảm ơn rất nhiều. Tôi đã cố gắng tìm ra gợi ý cuối cùng của bạn với các tìm kiếm như 'ổ cắm trung gian thể hiện của yêu cầu hiện tại' nhưng không thực sự tìm thấy bất cứ điều gì. Bất kỳ tài liệu tham khảo sẽ được đánh giá – mcktimo

+0

Trên thực tế nó đã không làm việc passport.use (FacebookStrategy mới (fbStrategy, function (req, token, refreshToken, hồ sơ, thực hiện) { console.log (req._toParam); đến trở lại như không xác định ngay cả khi được xác định ở đây .. app.get ('/ auth/facebook /: appId', chức năng (req, res, next) { req._toParam = req.params.appId console.log (req._toParam) Tôi đã đọc nhật ký sai. – mcktimo

+0

Đối với tất cả các chiến lược xác thực xã hội, req được thay thế bằng req.user – mcktimo

Các vấn đề liên quan