[英]Nodejs + Passport.js + Redis: how to store sessions in Redis
我讀過這個話題Node.js + express.js +passport.js : 在服務器重啟之間保持身份驗證,我需要完全相同的東西,但對於 Redis。 我使用了這樣的代碼:
var RedisStore = require('connect-redis')(express);
app.use(express.session({
secret: "my secret",
store: new RedisStore,
cookie: { secure: true, maxAge:86400000 }
}));
它不起作用。 要連接 Redis,我使用了 connect-redis 模塊。 我做錯了什么? 謝謝!
UPD :我沒有收到任何錯誤。 為了確保身份驗證過程成功,我添加了日志行並執行。
function(email, password, done) {
// asynchronous verification, for effect...
process.nextTick(function() {
findByEmail(email, function(err, user) {
if (!user) {
return done(null, false, {
message: 'Unknown user ' + email
});
}
if (user.password != password) {
return done(null, false, {
message: 'Invalid password'
});
}
//just logging that eveything seems fine
console.log("STATUS: User " + email + " authentificated succesfully");
return done(null, user);
})
});
}));
啟用 express.logger() 的日志是:
127.0.0.1 - - [Fri, 19 Oct 2012 05:49:09 GMT] "GET /ico/favicon.ico HTTP/1.1" 404 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"
STATUS: User admin authentificated succesfully
我確實認為 auth/users/credentials/serializing/deserializing 本身沒有任何問題。 問題是護照無法將 cookie 設置為 Redis 並讀取它。
我應該用
cookie: { secure: false, maxAge:86400000 }
試試這個,而不是將 express 傳遞給const RedisStore
pass session。
const redis = require('redis');
const session = require('express-session');
const redisStore = require('connect-redis')(session);
const cookieParser = require('cookie-parser');
const app = require('../app');
app.app.use(cookieParser("secret"));
const rediscli = redis.createClient();
app.app.use(session({
secret: 'secret',
store: new redisStore({
host: '127.0.0.1',
port: 6379,
client: rediscli,
ttl: 260
}),
saveUninitialized: false,
resave: false
}));
當您明確設置商店時會發生什么? 即您的應用程序中的這些內容:
var redis = require('redis');
// This is host and port-dependent, obviously
var redisClient= redis.createClient(6379, 'localhost');
app.use(express.session({
secret: 'your secret',
/* set up your cookie how you want */
cookie: { maxAge: ... },
store: new (require('express-sessions'))({
storage: 'redis',
instance: redisClient
})
}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.