2015-05-12 9 views
6

Ich versuche, Passport-Strategien in einen Segel-Haken zu implementieren, so kann ich auf mehrere Projekt teilen.Sails Haken Pass

Wenn ich einzuloggen versuchen Ich habe diesen Fehler:

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) 

las ich, dass ich eine Middleware in Config hinzuzufügen haben/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' 
    ] 
    } 

Alle es nach dieser Arbeit, aber ich bin unter einem installierbaren Hook und möchte nicht http.js manuell ändern, gibt es eine Möglichkeit, dies vom Haken zu ändern? Oder beheben Sie den Fehler, ohne dies hinzuzufügen.

+0

das ist eine gute Frage. Vielen Dank. – drj

Antwort

3

Wenn ich es richtig verstanden habe, müssen Sie pass.js in Ihrer Middleware initalisieren, aber Sie müssen vermeiden, http.js in jedem Ihrer Projekte manuell bearbeiten zu müssen. Dazu müssen Sie eine installable hook wie so schaffen würde:

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 {}; 
} 

Um es nutzen Sie einfach den Haken kopieren in Ihre node_modules oder npm publish und npm install es in Ihren Projekten.

+0

Genau das möchte ich! Es funktioniert jetzt großartig! Ich habe bereits meinen installierbaren Hook, aber ich wusste nicht Modify Config wie das funktionierte! Ich werde meinen Code säubern und ihn auf meinen Repo hier https://github.com/jaumard/sails-hook-passport setzen, wenn jemand daran interessiert ist – jaumard