2015-05-12 34 views
6

我想实施Passport策略到一个帆钩,就像我可以分享多个项目一样。帆挂钩护照

当我尝试登录我有这样的错误:

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) 

我读,我必须添加一些中间件在配置/ 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' 
    ] 
    } 

所有它之后,但我的工作'在一个可安装的钩子下,不想手动更改http.js,有没有办法从钩子修改这个?或修复错误而不添加此项。

+0

这是一个很好的问题。谢谢。 – drj

回答

3

如果我理解正确,您需要在您的中间件中初始化passport.js,但希望避免在每个项目中手动编辑http.js。要做到这一点,你需要创建一个installable hook像这样:

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

要使用它,你只需将钩复制到您的node_modulesnpm publishnpm install它在你的项目。

+0

这正是我想要的!现在效果很好!我已经有我的可安装钩子,但我不知道修改配置,像这样工作!如果有人对此感兴趣,我会清理我的代码并将其放在我的回购站https://github.com/jaumard/sails-hook-passport中 – jaumard