我正在尝试向我的node.js/express.js/react.js
应用程序添加身份验证。
我的目录结构如下:
application
server.js
www
js
app.js
sessions.js
我将这两行添加到server.js
var express = require('express'),
app = express(),
path = require('path'),
http = require('http').Server(app),
io = req
let sessions = require('./www/js/sessions');
app.use(sessions);
我跑node server.js
我看到一条我以前没见过的新消息:
$ node server.js
express-session deprecated req.secret; provide secret option www/js/sessions.js:16:22
然后在我连接到浏览器时出现此错误。如果我从server.js
删除上面的两行,程序运行正常:
在浏览器中,我看到异常:
TypeError: passport.initialize is not a function
at module.exports.passport (/home/idf/Documents/js/react-trader/www/js/sessions.js:18:56)
at Layer.handle [as handle_request] (/home/idf/Documents/js/react-trader/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/home/idf/Documents/js/react-trader/node_modules/express/lib/router/index.js:312:13)
at /home/idf/Documents/js/react-trader/node_modules/express/lib/router/index.js:280:7
at Function.process_params (/home/idf/Documents/js/react-trader/node_modules/express/lib/router/index.js:330:12)
at next (/home/idf/Documents/js/react-trader/node_modules/express/lib/router/index.js:271:10)
at expressInit (/home/idf/Documents/js/react-trader/node_modules/express/lib/middleware/init.js:33:5)
at Layer.handle [as handle_request] (/home/idf/Documents/js/react-trader/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/home/idf/Documents/js/react-trader/node_modules/express/lib/router/index.js:312:13)
at /home/idf/Documents/js/react-trader/node_modules/express/lib/router/index.js:280:7
我无法从错误中判断出它是否抱怨找不到sessions.js
,或者是否找不到npm
要求。我确实安装了express-session
,我在package.json
中看到了,所以不确定......
{
"name": "TraderWS",
"version": "1.0.0",
"description": "Trader Workstation",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Me",
"license": "MIT",
"dependencies": {
"babel-loader": "^6.2.10",
"babel-preset-es2015": "^6.22.0",
"babel-preset-react": "^6.22.0",
"body-parser": "^1.16.1",
"connect-redis": "^3.2.0",
"express": "^4.12.3",
"express-session": "^1.15.1",
"griddle-react": "^0.7.1",
"react": "^15.4.2",
"rx": "^4.0.7",
"socket.io": "^1.3.5",
"webpack": "^2.2.1"
}
}
答案 0 :(得分:0)
这可能会或可能不会帮助其他人。
最初的问题是我没有将护照传递给会议。这解决了这个问题:
let usersService = require('./service/users');
let bodyParser = require('./middleware/bodyParser');
let passport = require('./config/passport');
let sessions = require('./middleware/sessions')(passport); // was missing parameter passport
然后我有另一个问题,因为我在下面的代码中注释了注释版本,并且因为没有秘密而导致错误。一旦我真正输入字符串秘密,问题就消失了
'use strict';
const session = require('express-session');
let config = {
//secret: process.env.SESSION_SECRET,
secret: 'keyboard cat',
saveUninitialized: false,
resave: false
};
if (process.env.REDIS_URL) {
const RedisStore = require('connect-redis')(session);
config.store = new RedisStore({ url: process.env.REDIS_URL });
}
let expressSession = session(config);
module.exports = passport => [expressSession, passport.initialize(), passport.session()];