Laravel 5 如何检查用户是否仍然登录谷歌?

Laravel 5 如何检查用户是否仍然登录谷歌?,laravel-5,google-oauth,laravel-socialite,Laravel 5,Google Oauth,Laravel Socialite,我正在通过Laravel Socialite使用Google OAuth对我的web应用程序中的所有用户进行身份验证 我需要用户会话尽快结束,如果用户注销他的谷歌帐户 我正在尝试建立一个中间件,如果用户仍然登录谷歌,它将执行定期检查。但是我找不到一个方法去问“是吗?”user@example.com还是google上的当前用户?” 我试图在中间件中获取\Socialite::driver('google')->user(),但如果事先不重定向到google,这似乎不起作用。我希望这张支票尽可能快

我正在通过Laravel Socialite使用Google OAuth对我的web应用程序中的所有用户进行身份验证

我需要用户会话尽快结束,如果用户注销他的谷歌帐户

我正在尝试建立一个中间件,如果用户仍然登录谷歌,它将执行定期检查。但是我找不到一个方法去问“是吗?”user@example.com还是google上的当前用户?”

我试图在中间件中获取
\Socialite::driver('google')->user()
,但如果事先不重定向到google,这似乎不起作用。我希望这张支票尽可能快和不引人注目。它还应该在后台ajax调用期间工作

使用客户端身份验证似乎很简单,因为存在
gapi.auth2.init().isSignedIn.get()
。然而,这意味着我必须向用户请求两个授权(服务器端和客户端),这似乎是错误的


看看,除了重新验证之外,我看不到任何东西可以让我检查他们的身份验证状态。访问令牌在注销时不会过期。。。有解决办法吗?

事实证明,我们实际上可以将
gapi
javascript与Socialite结合使用——只需使用相同的客户端令牌即可。我没有想到我会在不单独登录浏览器会话的情况下获取所有信息,但它是有效的

我在主刀片模板的末尾添加了以下代码,以检查授权用户的状态

@auth
<script>
    var currentUserEmail = '{{Auth::user()->email}}';  // user "sameness" criterion
    var googleClientId = '{{env('GOOGLE_ID')}}';  // the same oauth client id
</script>
<script src="https://apis.google.com/js/platform.js"></script>
<script src="{{mix('js/checkGoogleAuth.js')}}"></script>
@endauth

我希望它也能帮助其他人

看来这在Safari 13中是坏的。*否则,效果很好:)谢谢!如果有人登录多个帐户,似乎也会出现问题。这似乎发生在他们先登录到另一个帐户,然后再登录到您要检查的主帐户时。没错,当人们在同一浏览器上使用多个帐户时,这一故障时有发生。如果你能找到一个很好的解决办法,我会很感激你给我另一个答案。
var auth2; // The Sign-In object.
var googleUser; // The current user.

/**
 * Initializes Signin v2 and sets up listeners.
 */
var initSigninV2 = function() {
  auth2 = gapi.auth2.init({
      client_id: googleClientId,
      scope: 'profile'
  });

  // Listen for sign-in state changes.
  auth2.isSignedIn.listen(checkState);
  auth2.currentUser.listen(checkState);
};

var checkState = function (user) {
    //if signed out or changed user
    if (!auth2.isSignedIn.get() || currentUserEmail != auth2.currentUser.get().getBasicProfile().getEmail())
        $('.logout-username').click();  //click logout button
};

gapi.load('auth2', initSigninV2);  //launch it