Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.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
Python 使用Flask登录注销特定用户_Python_Flask_Flask Login - Fatal编程技术网

Python 使用Flask登录注销特定用户

Python 使用Flask登录注销特定用户,python,flask,flask-login,Python,Flask,Flask Login,我正在为Flask web应用程序添加密码重置功能 重置密码后,我想注销使用该用户名登录的任何人。我知道Flask Login提供的logout\u user()方法。在我的应用程序中,密码重置是在用户未登录时完成的-使用电子邮件确认。它基本上是“忘记我的密码”功能。我正在寻找类似于注销用户(特定用户)的东西。还是一种使特定用户的cookie无效的方法?沿着这条线的东西 我之所以这么做是因为当前如果用户凭据被盗,他们重置了密码,那么拥有被盗凭据的人仍然登录并可以访问web应用。您可能应该存储密码

我正在为Flask web应用程序添加密码重置功能

重置密码后,我想注销使用该用户名登录的任何人。我知道Flask Login提供的
logout\u user()
方法。在我的应用程序中,密码重置是在用户未登录时完成的-使用电子邮件确认。它基本上是“忘记我的密码”功能。我正在寻找类似于
注销用户(特定用户)
的东西。还是一种使特定用户的cookie无效的方法?沿着这条线的东西


我之所以这么做是因为当前如果用户凭据被盗,他们重置了密码,那么拥有被盗凭据的人仍然登录并可以访问web应用。

您可能应该存储密码重置的时间戳,并将其与用户cookie进行比较。如果在生成cookie后重置了密码,则要求用户再次提供登录/密码

默认情况下,Flask登录cookie不包含时间戳,因此您必须稍微调整它

可能值得在Flask登录的GitHub上发布一个问题,因为它似乎是一个标准用例


编辑:实际上有一种更好的方法,请参见。它是关于使用用户密码散列(除其他外)来签署“记住我”cookie的。这样,如果密码更改,cookie事实上是未经验证的。

“我想这样做,因为当前如果用户凭据被盗,并且他们重置了密码,则拥有被盗凭据的人仍然登录并可以访问web应用。”-你说的“凭据”是什么意思,因为如果是用户名和密码,那么注销用户对这种情况没有帮助。凭据如您所述。应用程序首先向用户发送一封确认电子邮件,要求他们确认是否要重置密码。如果他们单击电子邮件中的确认链接,将生成新密码并发送到他们的电子邮件。无法访问此电子邮件地址的用户将不知道此新密码。如果他们可以被强制注销,那么他们将无法重新登录。@Burnkhalid:当然可以;如果密码也更改了,我所做的就是按照文档中列出的步骤操作;在my
LoginManager
对象上设置
token\u loader
回调函数,并在my
User
类中创建一个
get\u auth\u token
函数。对我来说,诀窍似乎是-我还没有彻底测试过这个-在应用程序配置中设置
永久会话\u life=0
。“记住我”cookie似乎只在用户会话过期时由Flask登录查看。目前我使用5分钟的会话生存期,因为在每个请求上编码和解码“记住我”令牌需要额外的开销。我可以预见我的解决方案的一个问题是,由于密码更改而运行无效会话的登录用户可能刷新页面(发出请求)每4分钟一次,以保持其会话活动。