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