- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
登录时需要一个“记住我”复选框,例如 this .我在使用 Passport 之前添加了一个中间件
app.use(function(req, res, next) {
if (req.method == 'POST' && req.url == '/login') {
if (req.body.rememberme) {
req.session.cookie.maxAge = 1000 * 60 * 3;
} else {
req.session.cookie.expires = false;
}
}
next();
});
app.use(passport.initialize());
app.use(passport.session());
req.body.rememberme
为真时无法登录,req.body.rememberme
为假时记住用户。我也试过 connect-ensure-login 还是错了。
还有一个问题:我应该什么时候删除数据库中的 cookie 以及如何删除?
:)
其他代码与 Passport 指南一模一样
路线:
app.get('/', passport.authenticate('local', {
failureRedirect: '/login'
}), function(req, res) {
res.redirect('/user/home');
});
app.post('/login', passport.authenticate('local', {
failureRedirect: '/login'
}), function(req, res) {
res.redirect('/user/home');
});
session :
passport.serializeUser(function(user, done) {
var CreateAccessToken = function() {
var token = user.GenerateSalt();
User.findOne({
accessToken: token
}, function(err, existingUser) {
if (err)
return done(err);
if (existingUser) {
CreateAccessToken();
} else {
user.set('accessToken', token);
user.save(function(err) {
if (err)
return done(err);
return done(null, user.get('accessToken'));
})
}
});
};
if (user._id)
CreateAccessToken();
});
passport.deserializeUser(function(token, done) {
User.findOne({
accessToken: token
}, function(err, user) {
if (err)
return done(err);
return done(err, user);
});
});
和策略:
passport.use(new LocalStrategy(function(userId, password, done) {
User.findOne().or([{
username: userId
}, {
email: userId
}]).exec(function(err, user) {
if (err)
return done(err);
if (!user) {
return done(null, false, {
message: 'Invalid password or username'
});
}
if (user.Authenticate(password)) {
return done(null, user);
} else {
return done(null, false, {
message: 'Invalid password or username'
});
}
});
}));
我注意到 Express 只会在哈希值更改时更新 cookie。所以我修改了中间件中的代码
app.use(function(req, res, next) {
if (req.method == 'POST' && req.url == '/login') {
if (req.body.rememberme) {
req.session.cookie.maxAge = 1000 * 60 * 3;
req.session._garbage = Date();
req.session.touch();
} else {
req.session.cookie.expires = false;
}
}
next();
});
现在我可以使用“记住我”登录,但它仅适用于 Ubuntu 上的 chromium 和 firefox。我仍然无法在 Win7 和 Android 上使用 chrome 和 firefox 上的“记住我”复选框登录。
我在win7上的chrome上POST到“/login”时检查了响应 header ,它具有与Ubuntu上相同的“Set-Cookie”字段,为什么它不能工作?
时间不同步...所以我发布了一个额外的时间字段。
$('#login').ajaxForm({
beforeSubmit: function(arr, $form, option) {
arr.push({
name: '__time',
value: (new Date()).toGMTString()
});
}
});
和“RememberMe”中间件:
app.use(function(req, res, next) {
if (req.method == 'POST' && req.url == '/login') {
if (req.body.rememberme) {
req.session.cookie.maxAge = moment(req.body.__time).add('m', 3) - moment();
req.session._garbage = Date();
req.session.touch();
} else {
req.session.cookie.expires = false;
}
}
next();
});
最佳答案
我遇到了和你一样的问题。以下代码适用于我:
app.post("/login", passport.authenticate('local',
{ failureRedirect: '/login',
failureFlash: true }), function(req, res) {
if (req.body.remember) {
req.session.cookie.maxAge = 30 * 24 * 60 * 60 * 1000; // Cookie expires after 30 days
} else {
req.session.cookie.expires = false; // Cookie expires at end of session
}
res.redirect('/');
});
关于node.js - 如何使用 Passport 将 "Remember Me"添加到我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15609232/
如 https://developer.android.com/jetpack/compose/side-effects , 我们有 derivedStateOf这有助于防止不必要的重组。 有了这个,
我正在使用 AWS Cognito Identity JS SDK ( https://github.com/aws/amazon-cognito-identity-js ),并尝试设置一些按钮来测试
按照教程, 我已经使用 Auth 构建了身份验证系统。 Pyramid 的 API。 我想了解如何在登录中引入两件事(勾选框): 记住我的名字 记住我的密码 我怎样才能做到这一点?我需要做什么? 谢谢
我在 Auth/ORM 和 auto_login 方面遇到问题。我将生命周期设置为两周,但无论浏览器是否关闭,我都会在大约一个小时后注销。事实上,它是基于时间的,因为 session 确实存在,即使在
我需要在使用 django-registration 应用程序的登录表单中实现一个“记住我”按钮。任何ane可以帮助我向我展示这样做的方法吗? 谢谢 最佳答案 一种方法是更改 session 到期
我有一个函数,它从数据库检索数据并将其传递给回调。出于优化目的,我希望此数据最多每 60 秒更新一次。我的闭包函数如下所示: function delayedUpdate(fn, delay, cal
我正在编写一个配备“记住我”的登录表单,到目前为止,我读过的教程(部分是为了确保我做得正确)都说将加密的密码存储在一个 cookie 和用户名。然后,每次 PHP 检查当前用户是否未登录时,检查他们的
我正在尝试在基于 ServiceStack 的项目中实现记住我 功能。我不想使用基本身份验证,因为它需要在浏览器 cookie 中以明文形式存储密码,因此我需要想出一种易于维护和自定义到我现有数据库的
我无法“记住”在 emacs 的组织模式下工作。 我在雪豹上。 我加了 (global-set-key (kbd "C-M-r") 'org-remember)到我的 .emacs 文件但是当我尝试使
问题是关于 JS 闭包的。我有红色的定义和例子,我相信我相当了解这个机制。所以,问题是关于我不明白的具体事情。请考虑以下两个代码。代码一: function a(){ let x = 5; retur
我正在实现“记住我”功能,我希望用户不必再次输入登录名/密码。 它似乎在本地工作,但在共享主机中,它持续大约 15 分钟然后注销。这是代码: 控制者: FormsAuthentication.SetA
在我的 Android 应用程序中,我使用一组随机生成的文件名来存储一些数据。为了确保在应用程序重新启动时生成相同的文件名集 - 并且每个应用程序安装都不同 - 我通过从一长串随机字母数字字符中选择名
当我尝试在特定数据库中重新创建特定表时,MySQL 让我很伤心;我认为问题出在 MySQL 的某个地方有一些表的外键记录,并在我尝试重新创建表时不断尝试检查约束。 有问题的数据库用于测试环境,并通过转
我正在尝试弄清楚如何在我正在开发的应用程序中实现“记住我”。目前我的实现看起来像这样。 用户登录并请求被记住 服务器使用电子邮件/密码验证用户 如果验证成功,我会使用用户的电子邮件和存储在服务器上的
我正在尝试使用 PHP 和 MySQL 创建一个登录系统。我使用 cookie 是为了让用户长时间保持登录状态。 cookie 有一个随机生成的字符串,它也在数据库中。将它们相互比较并采取适当的行动。
我在 Google CodeLabs:这是代码: @Composable fun WaterCounter( modifier: Modifier = Modifier, ) { va
如何在Grails中实现“记住我”功能,以便用户可以检查它,而他又不必在2周内再次登录? 我正在使用jSecurity插件,并希望在浏览器 session 之外更改cookie的生存期。 最佳答案 S
我最近一直在思考这个问题,我想从这个很棒的社区得到一些反馈。假设用户希望在登录时被记住是否安全?如果他们使用的是公共(public)计算机,是否可以假设他们足够聪明,可以在离开前注销? 最佳答案 我真
我试图使用带有用户名和 token 的cookie向网站添加“记住我”功能,该cookie也以加密方式存储在数据库中。我的问题是该 token 应保留多长时间? One website I read说
当要记住我的cookie时,有两种不同的方法: 哈希 “记住我” cookie存储一个可以标识用户的字符串(即用户ID)和一个可以证明所标识的用户是假装的用户的字符串-通常是基于用户密码的哈希。 to
我是一名优秀的程序员,十分优秀!