2015-05-12 21 views
6

Sto cercando di implementare le strategie Passport in un hook di vele, come questo posso condividere su più progetti.Sails hook passport

Quando provo ad accedere ho questo errore:

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) 

Ho letto che devo aggiungere un po 'di middleware in 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' 
    ] 
    } 

Tutto sta funzionando dopo questo, ma io Sono sotto un hook installabile e non voglio cambiare manualmente http.js, c'è un modo per modificare questo dal gancio? O correggere l'errore senza aggiungere questo.

+0

questa è una grande domanda. Grazie. – drj

risposta

3

Se ho capito bene, devi avviare passport.js nel tuo middleware ma vuoi evitare di dover modificare manualmente http.js in ognuno dei tuoi progetti. Per fare questo devi creare un installable hook in questo modo:

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

Per utilizzarlo è sufficiente copiare il gancio nel vostro node_modules o npm publish e npm install nei tuoi progetti.

+0

Questo è esattamente quello che voglio! Funziona alla grande ora! Ho già il mio hook installabile ma non sapevo modificare la configurazione come se funzionasse! Pulirò il mio codice e lo metto nel mio repository qui https://github.com/jaumard/sails-hook-passport se qualcuno è interessato a questo – jaumard