如何通过 Google 登录代码交朋友 Facebook 登录代码

How to make friends Facebook Log in code with Google log in code

我有两段代码,分别负责从他们的社交网络登录,Facebook 和 Google。

//GOOGLE
if(isset($_GET['code'])) {

    $token = $google_client->fetchAccessTokenWithAuthCode($_GET["code"]);

    //This condition will check there is any error occur during geting authentication token. If there is no any error occur then it will execute if block of code/
    if (!isset($token['error'])) {
        //Set the access token used for requests
        $google_client->setAccessToken($token['access_token']);

        //Store "access_token" value in $_SESSION variable for future use.
        $_SESSION['access_token'] = $token['access_token'];

        //Create Object of Google Service OAuth 2 class
        $google_service = new Google_Service_Oauth2($google_client);

        //Get user profile data from google
        $data = $google_service->userinfo->get();
        if (!empty($data['sub'])) {
            $_SESSION['user_id'] = $data['sub'];
        }
        if (!empty($data['given_name'])) {
            $_SESSION['user_name'] = $data['given_name'] . " " . $data['family_name'];
        }
        if (!empty($data['email'])) {
            $_SESSION['user_email_address'] = $data['email'];
        }
        if (!empty($data['picture'])) {
            $_SESSION['user_image'] = $data['picture'];
        }
    }
}
//FACEBOOK
$facebook_helper = $facebook->getRedirectLoginHelper();

if(isset($_GET['code'])) {
    if (isset($_SESSION['access_token'])) {
        $access_token = $_SESSION['access_token'];
    } else {
        $access_token = $facebook_helper->getAccessToken();
        $_SESSION['access_token'] = $access_token;
        $facebook->setDefaultAccessToken($_SESSION['access_token']);
    }

    $graph_response = $facebook->get("/me?fields=name,email", $access_token);
    $facebook_user_info = $graph_response->getGraphUser();

    if (!empty($facebook_user_info['id'])) {
        $_SESSION['user_image'] = 'http://graph.facebook.com/' . $facebook_user_info['id'] . '/picture';
    }
    if (!empty($facebook_user_info['id'])) {
        $_SESSION['user_id'] = $facebook_user_info['id'];
    }
    if (!empty($facebook_user_info['name'])) {
        $_SESSION['user_name'] = $facebook_user_info['name'];
    }
    if (!empty($facebook_user_info['email'])) {
        $_SESSION['user_email_address'] = $facebook_user_info['email'];
    }
} else {
    // Get login url
    $facebook_permissions = ['email']; // Optional permissions
    $facebook_login_url = $facebook_helper->getLoginUrl('https://2goe.com/demo/'.$lang.'/home/', $facebook_permissions);
}

如果他们在一起,那么:

  1. 当您单击 Google 登录时,redirectURL 响应服务器错误 500。
  2. 并且 Facebook 没有 return 代码中请求的用户数据。

但是,例如,如果您删除了其中一个社交网络的代码,它就可以正常工作。我自己试图以某种方式将 2 个代码绘制成一个代码,但无济于事。我也把它们分成不同的文件,但这也没有带来任何结果。

你能帮我把它们正确地组合起来,这样它们之间就不会有这样的冲突吗?

您遇到的问题是您正在设置具有相同会话名称的内容。 $_GET['code'] 可能是 facebook 或 google 你无法知道它是哪一个。

最简单的解决方案是先 运行 google 代码。然后稍微改变一下 Facebook 的 if 语句。

如果您这样做,facebook 的代码将查找一个代码,但它也会查找来自 Google 的错误。如果 google 返回一个错误,那么您可以尝试使用 facebook 的代码。如果它没有 return 错误,那么您知道该代码很可能被 Google.

使用
if(isset($_GET['code'] && isset($token['error'])) {