如何通过 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);
}
如果他们在一起,那么:
- 当您单击 Google 登录时,redirectURL 响应服务器错误 500。
- 并且 Facebook 没有 return 代码中请求的用户数据。
但是,例如,如果您删除了其中一个社交网络的代码,它就可以正常工作。我自己试图以某种方式将 2 个代码绘制成一个代码,但无济于事。我也把它们分成不同的文件,但这也没有带来任何结果。
你能帮我把它们正确地组合起来,这样它们之间就不会有这样的冲突吗?
您遇到的问题是您正在设置具有相同会话名称的内容。 $_GET['code'] 可能是 facebook 或 google 你无法知道它是哪一个。
最简单的解决方案是先 运行 google 代码。然后稍微改变一下 Facebook 的 if 语句。
如果您这样做,facebook 的代码将查找一个代码,但它也会查找来自 Google 的错误。如果 google 返回一个错误,那么您可以尝试使用 facebook 的代码。如果它没有 return 错误,那么您知道该代码很可能被 Google.
使用
if(isset($_GET['code'] && isset($token['error'])) {
我有两段代码,分别负责从他们的社交网络登录,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);
}
如果他们在一起,那么:
- 当您单击 Google 登录时,redirectURL 响应服务器错误 500。
- 并且 Facebook 没有 return 代码中请求的用户数据。
但是,例如,如果您删除了其中一个社交网络的代码,它就可以正常工作。我自己试图以某种方式将 2 个代码绘制成一个代码,但无济于事。我也把它们分成不同的文件,但这也没有带来任何结果。
你能帮我把它们正确地组合起来,这样它们之间就不会有这样的冲突吗?
您遇到的问题是您正在设置具有相同会话名称的内容。 $_GET['code'] 可能是 facebook 或 google 你无法知道它是哪一个。
最简单的解决方案是先 运行 google 代码。然后稍微改变一下 Facebook 的 if 语句。
如果您这样做,facebook 的代码将查找一个代码,但它也会查找来自 Google 的错误。如果 google 返回一个错误,那么您可以尝试使用 facebook 的代码。如果它没有 return 错误,那么您知道该代码很可能被 Google.
使用if(isset($_GET['code'] && isset($token['error'])) {