2015-01-09 12 views
5

tôi đã thiết lập facebook auth của tôi mỗi passportjs tài liệu:Cách tốt nhất để chỉ định động url chuyển hướng cho chiến lược OAuth trong passport.js là gì?

var passport = require('passport') 
    , FacebookStrategy = require('passport-facebook').Strategy; 

passport.use(new FacebookStrategy({ 
    clientID: FACEBOOK_APP_ID, 
    clientSecret: FACEBOOK_APP_SECRET, 
    callbackURL: "http://www.example.com/facebook/callback" 
    }, 
    function(accessToken, refreshToken, profile, done) { ... }); 
    } 
)); 

app.get('/login/facebook', passport.authenticate('facebook')) 
    .get('/facebook/callback', passport.authenticate('facebook', {successRedirect: '/', failureRedirect: '/login'})); 

Tất cả điều này hoạt động tốt. Tuy nhiên, có những trường hợp (như hết hạn mã thông báo) khi tôi muốn tự động chuyển hướng người dùng đến trang mà người dùng đã truy cập trước khi bắt đầu yêu cầu đăng nhập. Vì vậy, tôi đã cố gắng để plumb một param chuỗi truy vấn thông qua các yêu cầu đăng nhập (từ khách hàng đến máy chủ để facebook và trở lại). Nhưng tôi không thể nhìn thấy một cách để xác định rằng trong callbackURL.

Hơn nữa, khi tôi cố gắng mã hóa cứng một số thông số ngữ cảnh cho cấu hình callbackURL (ví dụ: "http://www.example.com/facebook/callback?redir=lastUserPage"), tôi nhận được lỗi phân tích cú pháp OAuth. Điều thú vị là, Facebook trả lời đúng với mã truy cập cũng như thông số chuyển hướng, nhưng nó không thành công với OAUTH ngoại lệ:

FacebookTokenError: Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request 
    at Strategy.parseErrorResponse (C:\Sources\node_modules\passport-facebook\lib\strategy.js:198:12) 
    at Strategy.OAuth2Strategy._createOAuthError (C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:345:16) 
    at C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:171:43 
    at C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:177:18 
    at passBackControl (C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:124:9) 
    at IncomingMessage.<anonymous> (C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:143:7) 
    at IncomingMessage.emit (events.js:117:20) 
    at _stream_readable.js:943:16 
    at process._tickCallback (node.js:419:13) 

Lưu ý rằng tôi đã làm việc này bằng WIF trước đây. Tôi không thấy bất kỳ mối lo ngại bảo mật nào khi chuyển các tham số chuỗi truy vấn bổ sung thông qua quy trình OAuth ..

Bất kỳ ý tưởng nào về cách vượt qua điều này?

Trả lời

0

Tôi không chắc chắn làm thế nào để làm những gì bạn đang hỏi, nhưng đối với mục tiêu cuối cùng mong muốn của bạn, bạn có thể:

  1. Lưu cookie trước khi chứng thực
  2. Xác thực người dùng
  3. trên kết quả trang gọi lại, kiểm tra cookie và chuyển hướng nếu có.

Thao tác này có dễ dàng không?

+0

Trong trường hợp của tôi, việc lưu trạng thái trong cookie là vấn đề vì nhiều lý do khác nhau. Trong mọi trường hợp, tôi phát hiện ra rằng điều này có thể được thực hiện bằng cách sử dụng tham số trạng thái của chiến lược. –

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