首页 > 解决方案 > 如何解决谷歌登录后javascript不重定向的问题?

问题描述

我正在尝试在我的网站上实施 Google 登录。如何将用户重定向到已登录的会员页面?

我现在可以验证令牌,验证后,用户应该被重定向到登录成员页面,我尝试使用 javascript 来执行此操作,但它似乎无法正常工作。

我试过在控制台中手动输入javascript,登录成功。

   <?php 
    ...
    require_once 'vendor/autoload.php';
    $client = new Google_Client();
    $client->setScopes('email');
    $payload = $client->verifyIdToken($id_token);
    if ($payload == true) {
       $userid = $payload['sub'];
       //check user existance
       if ($check_googleuser_result->num_rows == 1) {
           $_SESSION['loggedin_userlogin'] = $email;
           //redirect user
           echo '<script>window.location = "loggedin.php";</script>';
        } else {
         echo 'No matched user';
         //signout user
         echo '<script>location.replace("gsignout.php");</script>';
        }
     } else {
         echo 'error';
         //signout user
         echo '<script>location.replace("gsignout.php");</script>';
     }
    ?>

成功检查用户是否存在后,应重定向用户。

实际输出是会话已创建,但 javascript 未执行重定向。

更新: background1 的屏幕截图 background2 的 屏幕截图

标签: javascriptphpgoogle-apigoogle-signin

解决方案


当您尝试在 php 代码中重定向时,您还应该使用 php 提供的函数。

为此,有一个名为header()的函数

所以你的代码看起来像这样:

<?php 
    ...
    require_once 'vendor/autoload.php';
    $client = new Google_Client();
    $client->setScopes('email');
    $payload = $client->verifyIdToken($id_token);
    if ($payload == true) {
       $userid = $payload['sub'];
       //check user existance
       if ($check_googleuser_result->num_rows == 1) {
           $_SESSION['loggedin_userlogin'] = $email;
           //redirect user
           header('Location: loggedin.php');
        } else {
         echo 'No matched user';
         //signout user
         header('Location: gsignout.php');
        }
     } else {
         echo 'error';
         //signout user
         header('Location: gsignout.php');
     }
 ?>

推荐阅读