我使用的是python-social-auth,但是当用户退出Google时,我的应用未退出

问题描述

我正在使用python-social-auth来授权我的应用,一切正常。我可以通过OAuth2登录到我的应用,然后通过典型的Django注销退出

我的问题:如果某个用户从Google(例如,从GMail)注销,则不会退出我的Django应用。即使Google还是我,我仍然被授权为Google用户已注销。

我尝试通过下面的加载策略刷新令牌,以“强制”检查以确保Google仍在登录并且无法正常工作。

<select id="language" name="language" value="{{ $user->language }}" class="fullwidth mdl-selectfield__select">
  <option value="de" @if($user->language == "de") selected @endif>Deutsch</option>
  <option value="en" @if($user->language == "en") selected @endif>English</option>
  <option value="fr" @if($user->language == "fr") selected @endif>Français</option>
  <option value="nl" @if($user->language == "nl") selected @endif>Nederlands</option>

我觉得我走错了路。我要做的就是验证Google是否仍然登录,以便我可以认为我的OAuth2会话有效。有没有办法进行完整性检查?

我在做什么错或需要做什么?到目前为止,我的研究表明我想要的甚至是不可能的-我不喜欢这个答案,所以希望在这里一个不同的答案。

解决方法

基于 OAuth2 的实现,这看起来不可能。

我已经放弃尝试让它成为我想要的样子。我考虑过定期重复 OAuth2 请求,但这对用户来说似乎很费力,因为他们会被提示。

似乎最好的方法是 Google 自己使用的方法:

如果用户导航到应用程序的敏感区域,在那里他们可以执行可能被认为有害的功能,或者如果他们导航某个地方以访问更敏感的信息,请考虑使用新的重新授权Oauth2 请求。

这不是我想要的,但看起来 OAuth2 可以提供。

我也在考虑在 OAuth2 上实现一个计时器,并简单地说明如果登录会话早于“X”,则强制执行另一个 OAuth2 质询。

这些策略的混合似乎是可以接受的。我暂时关闭它 - 如果有人有更好的建议或解决方案,请添加它!