无法获取到req.AV.user

使用AV.Cloud.CookieSession,当用户AV.User.logIn后,可以接收到登录的用户的数据,但是req.AV = {},无法获取到req.AV.user。
请问怎么解决?

AV.Cloud.CookieSession配置

// 加载 cookieSession 以支持 AV.User 的会话状态
app.use(AV.Cloud.CookieSession({
	secret    : chance.guid(),
	name      : '_csid',
	key       : axe.config.appKey,
	maxAge    : 3600000,
	fetchUser : true
}));

AV.User.logIn方法

AV.User.logIn(username, password, {
    success : function(result){
        console.log('req.AV.user', req.AV); // print: {}
    },
    error : function(err){
        res.send('System error');
    }
});

另外,我的代码里使用了 express-session 中间件

谢谢

user 对象的来源有两个方式:
方式一:webHosting 收到的 http 请求里面带有 sessionToken 的 header 信息,通过该信息能感知到 user 对象。
方式二:在 webHosting 服务端使用 AV.User.logIn 方法或者其他方法登录。

而 req.AV.user 对象只会在方式一的情况下出现。也可以这么理解:user 是 req 的一个属性(req.AV.user),也就是 user 的信息是在 req 上的(header 上的 sessionToken)。

如果是方式二,req 上是不会再有 user 信息,因为 user 对象是可以通过上下文获取的,比如你的代码:

success : function(result){
        ...
},

其中 result 就是 user 对象。所以建议需要使用 user 的地方,都使用 result 这个对象。如果有方法调用里需要用到 user,建议明确的方法传递。

当然,你也可以使用 AV.User.current() 来获取到当前用户,但是这个不推荐使用,因为在服务端 user 对象一般都是和 request 的生命周期绑定,而不是一个全局对象。

我们现在使用 domain 模块来做隔离,所以看起来 AV.User.current() 是一个全局变量,其实是每个 request 相互隔离的,所以不会有串号的风险。但有用户反馈这样可能仍然有问题(见这里12)。所以我们不能保证永远支持在 LeanEngine 中通过 AV.User.current() 获取用户信息。

顺便提下,我们的 cookie session 中间件是可以和 express-session 一起使用的,没有关系。

感谢你的详细回复。
我另一个项目使用的同样的方式,处理登录,req.AV.user是可以获取到当前用户的;
现在获取不到,req.AV = {};
那么我如果将result(user)设置为req.AV的字段,不会被覆盖吧?也就是AV.Cloud.CookieSession的机制中,会不会在req.AV创建后,根据条件修改req.AV,重置为{}?