this.app.use(session({
secret: process.env.SESSION_SECRET || configuration.session_secret,
store: new fileStore(),
resave: false,
saveUninitialized: false
}));
// config authentication
this.app.use(passport.initialize());
this.app.use(passport.session());
// Configure Passport
passport.use('local-login', new localStrategy.Strategy(
(username, password, done) => {
Services.users.authenticatePromise(username, password).then(
function(token) {
done(null, token);
},
function(err) {
done(null, false, err);
},
).done();
},
));
// Serialize user in session
passport.serializeUser((token: AccessToken, done) => {
let user = {
_token: token.accessToken,
_expiryInAt: token.expiryInMs + new Date().getTime(),
};
done(null, user);
});
passport.deserializeUser((sessionUser, done) => {
done(null, sessionUser);
});
我错过了什么?
我可以看到你的代码有几个错误。
首先,SerializeUser
应该接受一个对象并返回一个字符串(通常是唯一的id或数据库键)。您的函数当前接受一个字符串并返回一个对象;那是倒过来的。
其次,DeserializeUser
应该接受一个字符串并返回一个user对象。您的函数当前接受一个对象并返回相同的对象。
最后,SerializeUser
和DeserializeUser
必须是彼此相反的;这意味着,passport可以调用DeserializeUser(serializeUser(user))
并取回原始用户对象。
所以你会想要这样的东西:
passport.serializeUser((user, done) => {
return user.id;
});
passport.deserializeUser((id, done) => {
getUserFromDatabase({id: id}, function(err, user) {
if (err) {
done(err, null); // something went wrong; return error
} else if (!user) {
done(null, false); // no user found; return `false`
} else {
done(null, user); // return user
}
});
});
我正在使用codeigniter。我有个奇怪的问题。我在用户登录时设置会话,并将其重定向到新页面。我观察到,会话有时设置,有时不设置。我尝试过使用codeigniter会话 以下是配置文件的外观:
我在Chrome上使用数据库的codeigniter会话有一个严重的问题:当我使用Chrome开发者工具刷新页面时,会话被破坏。 这是我的会话配置: 你知道吗?
我正在Codeigniter中创建API。在这个API中,我为用户提供了一个登录函数。如果登录成功,我将在CI会话中设置用户数据,并将会话返回给用户。 现在,用户可以使用该会话ID来验证他自己的所有其他请求,如添加/更新/删除。基本上,我希望当用户发送下一个请求时,我可以根据他的会话ID验证他的凭据。 客户请求代码: 上面是一个从客户端到服务器的登录请求示例。在服务器端,服务器验证客户端提供的凭据
问题内容: 我在会话方面遇到问题,有时我 刚刚 设置的会话变量在下一页请求中未定义。为了正确设置变量,我通常必须再次执行该流程。 我可以确认我没有尝试将会话变量设置为undefined。他们有合法的价值。 在我的应用中,用户从/ twitter / connect /移至/ twitter / callback /。前者从Twitter检索一些oauth数据,后者将用户登录到Twitter。 /
我正在尝试使用Spring和DBunit测试我的代码(http://springtestdbunit.github.io/) 一旦进入单元测试: 将返回DBUnit插入的实体列表,因此它确实在数据库(MYSQL)中插入了记录。 但是: 将返回false!它无法使用无状态会话找到任何记录。 之前,我使用Liquibase插入相同的记录,这段代码工作得很好。 使用HSql更糟糕的是,它在尝试打开无状态
问题内容: 下面的函数是我在Web应用程序中具有的按钮的actionListener,我正在从数据库中的表中删除旧选择的行,并将新行插入数据库中。 我一直在例外:会话关闭!有人可以解释一下如何在hibernate状态下关闭会话(自动吗?)以及如何使用它们。 这是该异常的详细堆栈跟踪: 谢谢, 问题答案: 在Hibernate会话显然配置为基于请求的情况下,您在会话范围内的受管Bean中使用了延迟获