Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 护照号码为';t保持持久登录会话_Javascript_Node.js_Mongodb_Passport.js_Passport Local - Fatal编程技术网

Javascript 护照号码为';t保持持久登录会话

Javascript 护照号码为';t保持持久登录会话,javascript,node.js,mongodb,passport.js,passport-local,Javascript,Node.js,Mongodb,Passport.js,Passport Local,我先看了一下,但没有帮助,也没有意义 我正在尝试使用我的帐户进行持久登录。我的序列化过程不起作用 // Passport needs to be able to serialize and deserialize users to support persistent login sessions passport.serializeUser(function(user, done) { console.log('serializing user:',user.username);

我先看了一下,但没有帮助,也没有意义

我正在尝试使用我的帐户进行持久登录。我的序列化过程不起作用

// Passport needs to be able to serialize and deserialize users to support persistent login sessions
passport.serializeUser(function(user, done) {
    console.log('serializing user:',user.username);
    //return the unique id for the user
    return done(null, user._id);
});

//Desieralize user will call with the unique id provided by serializeuser
passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
        console.log('deserializing user:',user.username);
        return done(err, user);
    });
});
整个passport文件可以在github上找到

我认为问题在于我立即被反序列化,或者至少console.logs显示了这一点

也可以是我的课程:

app.use(session({
    secret: 'keyboard cat',
    cookie : {
        maxAge: 3600000 // see below
    }
}));
以下是我的用户模式:

var userSchema = new mongoose.Schema({
    username : String,
    password : String, //Hash
    created_at : {type: Date, default : Date.now}
});
谢谢你的帮助

您提到的链接是关于express framework的旧版本,您在
包中使用的。json
“express”:“~4.13.1”
,是非常新的

您需要移动这些行:

app.use(passport.initialize());
app.use(passport.session());
稍高一点,位于
应用程序的正下方。使用(session({…})


我建议您关注这篇博文,它肯定会帮助您

您的问题不在passport或后端。它位于前端,带有angular。当用户进行登录操作时,您只需设置
$rootScope.authenticated
,但您需要在每次应用程序初始化时通过调用使用api查看用户以前是否已登录


因此,也许在
routes/api.js
中创建一个
router.route('/current_user')
路由,该路由应返回
null
(或某种来宾用户对象)或者,它将返回当前登录的用户信息,以便您的前端angular应用程序知道用户是否登录,并具有一些用户信息。如果
/api/current_user
提供了一个用户,那么您就知道您已登录,您可以设置
$rootScope.authenticated=true
只需登录即可它对任何人都有帮助

检查您的客户端/浏览器是否正在执行
Set Cookie
标题


在我的例子中,它在Safari中运行良好,但在Chrome或Firefox中没有。这显然是一个客户端问题,因为没有浏览器识别服务器端代码。Safari和Chrome/Firefox之间的一个区别是,Safari中使用了
fetch
polyfill,而Chrome和Firefox本机支持它。
fetch
除非在选项中提供
凭据,否则不要使用
Set Cookie
标题。

很抱歉,我刚刚看到了这个答案。我来看看!这似乎是解决方法