我希望有一个"保持登录状态"选项,例如Gmail提供的选项.这样,用户可以决定他们是否希望在先前关闭它之后打开新的浏览器会话时保持会话打开.
在查看github问题时,我看到cookie-session组件没有提供一种方法来提升动态maxAge属性.
我想知道是否有任何方法可以实现组件的"保持登录"功能cookie-session.
我正在研究后端编程,特别是 Node.js 和 ExpressJS,目前让我感到困惑的是 cookie-session 库的“keys”道具如何帮助我们?它的意义何在?已经阅读了许多与身份验证、会话等相关的不同材料,但是这个特定问题的答案对我来说仍然是模棱两可的。
有人能给我一个深入的解释,最好是两种方式:简单的术语和使用编程词典,关于这个主题?
我已经设置了一个工作登录测试,如下所示:
var express = require('express');
var fs = require('fs');
var http = require('http');
var path = require('path');
var routes = require('./routes/index.coffee');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('./userdb.coffee');
var app = express();
var RedisStore = require('connect-redis')(express);
passport.use(new LocalStrategy(function(username, password, done) {
return User.findOne({
username: username
}, function(err, user) {
if (err) {
return done(null, false, message: error);
}
if (!user) {
return done(null, false, {
message: 'Unknown user'
});
}
if (!user.validPassword(password)) {
return done(null, …Run Code Online (Sandbox Code Playgroud) 我试图在我的MVC应用程序中存储用户特定数据作为身份声明或会话数据之间做出选择,以减少数据库往返请求的数量和频率.但是,考虑到性能,安全性和其他最佳实践考虑因素,我不知道要走哪条路线.
我将对此提出任何建议表示感谢.
asp.net-mvc session-state claims-based-identity session-cookies cookie-session
到目前为止我对passport.js的理解是passport.js序列化用户对象并每次向客户端发送一个ID。我才刚刚开始,如果这是一个愚蠢的问题,我很抱歉:
我之所以express-session使用 ,是cookie-session因为我是初学者。我对cookie-session的理解是每次都会发送一个session ID,需要的时候可以用这个ID去查数据库。
现在,我不明白为什么我们不能只使用passport.js ID?为什么我们还需要使用cookie-session呢?另外,(这可能有点不相关,但是)基于会话的身份验证和基于令牌的身份验证之间的区别是共享的 ID 是动态的,还是每次都在变化?2020 年这仍然是标准且现代的做法吗?
我遵循了一门课程,它使用护照、passport-google-oauth20、cookie-session 实现了用户身份验证,并且一切正常(登录、注销、会话处理),但是当我发送登录/注册请求时,它不会询问/prompt 谷歌认证窗口输入凭据,它总是使用相同的帐户登录。
这是护照策略配置:
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const mongoose = require('mongoose');
const keys = require('../config/keys');
const User = mongoose.model('users');
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id).then(user => {
done(null, user);
});
});
passport.use(
new GoogleStrategy(
{
clientID: keys.googleClientID,
clientSecret: keys.googleClientSecret,
callbackURL: '/auth/google/callback',
proxy: true,
authorizationParams: {
access_type: 'offline',
approval_prompt: 'force'
}
},
async (accessToken, refreshToken, profile, done) => {
const existingUser = await User.findOne({ googleID: profile.id })
if (existingUser) { …Run Code Online (Sandbox Code Playgroud)