2015-05-12 18 views
6

Tôi đang cố gắng thực hiện các chiến lược Hộ chiếu thành một cái móc buồm, như thế này tôi có thể chia sẻ trên nhiều dự án.Sails hook passport

Khi tôi cố gắng đăng nhập Tôi có lỗi này:

Error: passport.initialize() middleware not in use 
    at IncomingMessage.req.login.req.logIn (/Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails-hook-passport/node_modules/passport-github/node_modules/passport-oauth/node_modules/passport/lib/passport/http/request.js:30:30) 
    at /Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails-hook-passport/api/controllers/AuthController.js:163:11 
    at Strategy.strategy.success (/Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails-hook-passport/node_modules/passport/lib/middleware/authenticate.js:194:18) 
    at verified (/Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails-hook-passport/node_modules/passport-twitter/node_modules/passport-oauth1/lib/strategy.js:169:16) 
    at returnResults (/Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:168:9) 
    at /Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:74:16 
    at /Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:82:7 
    at Object.async.each (/Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/async/lib/async.js:121:20) 
    at /Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:425:11 
    at /Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:564:5 
    at Object.async.each (/Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/async/lib/async.js:121:20) 
    at _buildChildOpts (/Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:453:9) 
    at _execChildOpts (/Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:421:8) 
    at /Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:80:10 
    at bound (/Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/lodash/dist/lodash.js:957:21) 
    at applyInOriginalCtx (/Users/jaumard/IdeaProjects/HookPassportTest/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:421:80) 

tôi đọc mà tôi có thêm một số trung gian trong config/http.js

middleware: { 

    passportInit : require('passport').initialize(), 
    passportSession : require('passport').session(), 

    order: [ 
     'startRequestTimer', 
     'cookieParser', 
     'session', 
     'passportInit', 
     'passportSession', 
     'myRequestLogger', 
     'bodyParser', 
     'handleBodyParserError', 
     'compress', 
     'methodOverride', 
     'poweredBy', 
     'router', 
     'www', 
     'favicon', 
     '404', 
     '500' 
    ] 
    } 

Tất cả nó làm việc kể từ này nhưng tôi dưới một hook có thể cài đặt và không muốn thay đổi http.js theo cách thủ công, có cách nào để sửa đổi điều này từ móc không? Hoặc sửa lỗi mà không cần thêm lỗi này.

+0

đây là một câu hỏi hay. Cảm ơn. – drj

Trả lời

3

Nếu tôi hiểu chính xác, bạn cần phải init passport.js trong phần mềm trung gian nhưng muốn tránh phải chỉnh sửa http.js theo cách thủ công trong từng dự án của bạn. Để làm được điều mà bạn muốn tạo ra một installable hook như vậy:

module.exports = function passware(sails) { 

sails.config.http.middleware = { 

    passportInit : require('passport').initialize(), 
    passportSession : require('passport').session(), 

    order: [ 
     'startRequestTimer', 
     'cookieParser', 
     'session', 
     'passportInit', 
     'passportSession', 
     'myRequestLogger', 
     'bodyParser', 
     'handleBodyParserError', 
     'compress', 
     'methodOverride', 
     'poweredBy', 
     'router', 
     'www', 
     'favicon', 
     '404', 
     '500' 
    ] 
    } 

    return {}; 
} 

Để sử dụng nó, bạn chỉ cần sao chép móc vào node_modules hoặc npm publishnpm install nó trong các dự án của bạn.

+0

Đó chính là điều tôi muốn! Nó hoạt động tốt ngay bây giờ! Tôi đã có hook cài đặt của tôi nhưng tôi không biết sửa đổi cấu hình như thế này đã được làm việc! Tôi sẽ làm sạch mã của tôi và đặt nó trên repo của tôi ở đây https://github.com/jaumard/sails-hook-passport nếu ai đó quan tâm đến điều này – jaumard