2015-01-02 3 views
1

Express-stormpath 앱을 빌드 할 때 위에서 지정한 오류가 발생합니다. 처음에 경로 서명이 있지만하지 않았다되었다stormpath error 'requestAuthenticator '필드를 지정하지 않은 경우,

var express = require('express'), 
     session = require('express-session'), 
     crypto = require('crypto'), 
     formidable = require('formidable'), 
     path = require('path'), 
     favicon = require('serve-favicon'), 
     logger = require('morgan'), 
     cookieParser = require('cookie-parser'), 
     bodyParser = require('body-parser'), 
     index = require('./routes/index'), 
     users = require('./routes/users'), 
     stormpath = require('express-stormpath'), 
     config = require('./config/credentials.js'), 
     app = express(); 

    function hashPwd(pwd) { 
    return crypto.createHash('sha256').update(pwd).digest('base64').toString(); 
    } 

    // view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 


app.use(stormpath.init(app, { 
    apiKeyFile: config.stormpathapi.apiKeyFile, 
    application: config.stormpathapi.application, 
    secretKey: config.stormpathapi.secretKey, 
    sessionDuration: 1000 * 60 * 30 
})); 

// domains for better error handling 
app.use(function(req, res, next){ 
    // create a domain for this request 
    var domain = require('domain').create(); 
    // handle errors on this domain 
    domain.on('error', function(err){ 
     console.error('DOMAIN ERROR CAUGHT\n', err.stack); 
     try { 
      // failsafe shutdown in 5 seconds 
      setTimeout(function(){ 
       console.error('Failsafe shutdown.'); 
       process.exit(1); 
      }, 5000); 

      // stop taking new requests 
      server.close(); 

      try { 
       // attempt to use Express error route 
       next(err); 
      } catch(error){ 
       // if Express error route failed, try 
       // plain Node response 
       console.error('Express error mechanism failed.\n', error.stack); 
       res.statusCode = 500; 
       res.setHeader('content-type', 'text/plain'); 
       res.end('Server error.'); 
      } 
     } catch(error){ 
      console.error('Unable to send 500 response.\n', error.stack); 
     } 
    }); 

    // add the request and response objects to the domain 
    domain.add(req); 
    domain.add(res); 

    // execute the rest of the request chain in the domain 
    domain.run(next); 
    }); 

    // cross-site request forgery protection 
    app.use(require('csurf')()); 

    app.use(function(req, res, next){ 
     res.locals._csrfToken = req.csrfToken(); 
     next(); 
    }); 

    app.use(logger('dev')); 
    app.use(bodyParser.json()); 
    app.use(bodyParser.urlencoded({ extended: true })); 
    app.use(cookieParser()); 
    app.use(express.static(path.join(__dirname, 'client'))); 

    //name: cookie_name, 
    //store: sessionStore, // connect-mongo session store 
    app.use(session({ 
     secret: config.cookieSecret, 
     resave: false, 
     saveUninitialized: true 
    })); 

    app.use('/', index); 
    app.use('/users', users); 

    // catch 404 and forward to error handler 
    app.use(function(req, res, next) { 
     var err = new Error('Not Found'); 
     err.status = 404; 
     next(err); 
    }); 

    // error handlers 

    // development error handler 
    // will print stacktrace 
    if (app.get('env') === 'development') { 
     app.use(function(err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('error', { 
      message: err.message, 
      error: err 
     }); 
    }); 
    } 

    // production error handler 
    // no stacktraces leaked to user 
    app.use(function(err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('error', { 
      message: err.message, 
      error: {} 
     }); 
    }); 


    module.exports = app; 

경로

var express = require('express'), 
     stormpath = require('express-stormpath'), 
     router = express.Router(); 

    router.get('/', stormpath.groupsRequired(['dataentry']), function(req, res) { 
    res.render('index', { title: 'Volume Grid Data Entry' }); 
    }); 

module.exports = router; 

하는 index.js

Error: If you do not specify a 'requestAuthenticator' field, you must specify an ApiKey. 
     at Object.getAuthenticator (d:\dev\git-repos\bps\VolumeGridDataEntry\node_modules\express- stormpath\node_modules\stormpath\lib\authc\index.js:24:11) 
     at new RequestExecutor (d:\dev\git-repos\bps\VolumeGridDataEntry\node_modules\express-stormpath\node_modules\stormpath\lib\ds\RequestExecutor.js:37:37) 
      at new DataStore (d:\dev\git-repos\bps\VolumeGridDataEntry\node_modules\express-stormpath\node_modules\stormpath\lib\ds\DataStore.js:46:52) 
      at new Client (d:\dev\git-repos\bps\VolumeGridDataEntry\node_modules\express-stormpath\node_modules\stormpath\lib\Client.js:8:21) 
     at d:\dev\git-repos\bps\VolumeGridDataEntry\node_modules\express-stormpath\lib\stormpath.js:60:36 
     at d:\dev\git-repos\bps\VolumeGridDataEntry\node_modules\express-stormpath\node_modules\stormpath\lib\authc\ApiKeyLoader.js:14:14 
     at d:\dev\git-repos\bps\VolumeGridDataEntry\node_modules\express-stormpath\node_modules\stormpath\node_modules\properties-parser\index.js:348:20 
     at fs.js:208:20 
     at Object.oncomplete (fs.js:108:15) 

[업데이트] server.js : 나는 해당 코드를 나열합니다 어느 쪽이든 일하십시오./

router.get('/', stormpath.loginRequired, function(req, res) { 

감사합니다 - : 나는 loginRequired 또는 groupsRequired 또는 둘 모두를 사용하는 경우는 그래서, 나는 확실하지 않다 ... 그룹에 대한 기본 페이지 보안에 대한 미래의 능력이 필요합니다!

답변

1

코드가 올바르게 보이지만 코드는 어디에서 app.use(require('./index'));입니까? 위의 내용은 app.use(stormpath.init(...)) 이후 필요합니다.)

참고 : 저는 express-stormpath 라이브러리의 저자입니다.

편집 : 다음은 전체 예제 :

var express = require('express'), 
    stormpath = require('express-stormpath'), 
    router = express.Router(); 

var app = express(); 

router.get('/', stormpath.groupsRequired(['dataentry']), function(req, res) { 
res.render('index', { title: 'Volume Grid Data Entry' }); 
}); 

app.use('/', router); 

app.listen(3000); 
+0

안녕과 @rdegges을 회신 주셔서 감사합니다. 경로 포함으로 질문을 업데이트했습니다. 나는 다른 파일에 정의 된 경로를 가지고 있지만 stormpath init 이후에 내 코드와 코드를 가져 오는 것을 제외하고는 내 코드와 사용자 코드가 동일하다고 생각합니다. 오늘 저녁에 다시 보겠습니다. 고맙습니다! –

+0

P. @rdegges 또한 다른 미들웨어를 망칠 수도 있습니다. 오늘 저녁에 전체 server.js를 게시 할 예정입니다. 시간 내 줘서 고마워! –

+0

그래도 오류가 계속 발생합니다. 나는 그것이 다른 미들웨어 중 하나라고 추측하고있다. 나는 stormpath를 제외한 모든 것을 주석으로 시작하겠습니다. @rdegges –

관련 문제