为什么WebApp2 auth.get_user_by_session()会更改令牌?

时间:2014-08-18 12:34:26

标签: google-app-engine webapp2

我正在使用带有auth的WebApp2进行用户会话。我的客户端偶尔会向服务器发出几乎同时的请求。第一个将使用如下所示的会话数据发出请求:

{
 'cache_ts': 1408106895, 
 'token': u'GXpsaVQh5ZWtqxJMUBpGTr', 
 'user_id': 5690665774088192L, 
 'remember': 1, 
 'token_ts': 1408034938
}

然后在调用auth.get_user_by_session()之后,会话返回如下:

{
 'cache_ts': 1408124980, 
 'token': u'0IVduczdGR5PkrMqNhBvzW', 
 'user_id': 5690665774088192L, 
 'remember': 1, 
 'token_ts': 1408124980
}

如您所见,令牌已更改,时间戳已更新。

几乎同时发出另一个包含相同初始会话数据的请求。

{
 'cache_ts': 1408106895, 
 'token': u'GXpsaVQh5ZWtqxJMUBpGTr', 
 'user_id': 5690665774088192L, 
 'remember': 1, 
 'token_ts': 1408034938
}

但是,该令牌现在无效,因此会话数据设置为None。这会擦除用户会话,并导致很多问题。我应该使用一些设置来延长UserToken的使用寿命吗?有没有比get_user_by_session()更合适的方法?我想,使用相同会话数据的几乎同时发出的请求不应该引起很大的问题。理想的情况是,如果auth收到无效或过期的令牌,它就会忽略它们,并抛出错误。

更新1

希望它是一个简单的事情,比如将False传递给get_user_by_session()。那当然会立即杀死会议。

更新2

我发现我只需要user_id字段,而且这是免费提供的cookie数据。实施可以减少问题的发生频率。然而问题实际上并没有解决,而且我喜欢熟悉这个图书馆的人的一些意见。

1 个答案:

答案 0 :(得分:2)

这是由于token_new_age参数默认为1天所以...每24小时一次,令牌会改变。

这是一项安全措施,因为如果有人破解该会话,那么它只会工作24小时。

参数'token_max_age'也将在消耗时间时删除令牌。