我正在使用Graph API,但我无法弄清楚如何获取登录用户的电子邮件地址.
Graph的简介说明"The Graph API可以访问您通常在网站注册表单中请求的所有基本帐户注册数据,包括姓名,电子邮件地址,个人资料图片和生日"
一切都很好,但我如何访问该信息?
这是我到目前为止:
$json = $facebook->api('/me'); $first = $json['first_name']; // gets first name $last = $json['last_name'];
Gazler.. 73
获取用户电子邮件地址的唯一方法是请求电子邮件字段的扩展权限.用户必须允许您查看此内容,并且无法获取用户朋友的电子邮件地址.
http://developers.facebook.com/docs/authentication/permissions
如果您通过在调用Auth Dialog的get字符串中传递scope = email来使用Facebook连接,则可以执行此操作.
我建议使用SDK而不是file_get_contents,因为它可以更容易地执行Oauth身份验证.
获取用户电子邮件地址的唯一方法是请求电子邮件字段的扩展权限.用户必须允许您查看此内容,并且无法获取用户朋友的电子邮件地址.
http://developers.facebook.com/docs/authentication/permissions
如果您通过在调用Auth Dialog的get字符串中传递scope = email来使用Facebook连接,则可以执行此操作.
我建议使用SDK而不是file_get_contents,因为它可以更容易地执行Oauth身份验证.
// Facebook SDK v5 for PHP // https://developers.facebook.com/docs/php/gettingstarted/5.0.0 $fb = new Facebook\Facebook([ 'app_id' => '{app-id}', 'app_secret' => '{app-secret}', 'default_graph_version' => 'v2.4', ]); $fb->setDefaultAccessToken($_SESSION['facebook_access_token']); $response = $fb->get('/me?locale=en_US&fields=name,email'); $userNode = $response->getGraphUser(); var_dump( $userNode->getField('email'), $userNode['email'] );
打开base_facebook.php在函数中添加Access_token getLoginUrl()
array_merge(array( 'access_token' => $this->getAccessToken(), 'client_id' => $this->getAppId(), 'redirect_uri' => $currentUrl, // possibly overwritten 'state' => $this->state), $params);
和使用范围的电子邮件权限
if ($user) { echo $logoutUrl = $facebook->getLogoutUrl(); } else { echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream')); }
要获取用户电子邮件,您必须使用该email
权限使用他的Facebook帐户登录用户.用于Facebook PHP SDK(参见github)如下.
首先检查用户是否已登录:
require "facebook.php"; $facebook = new Facebook(array( 'appId' => YOUR_APP_ID, 'secret' => YOUR_APP_SECRET, )); $user = $facebook->getUser(); if ($user) { try { $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { $user = null; } }
如果他不是,你可以显示要求email
许可的登录链接:
if (!$user) { $args = array('scope' => 'email'); echo 'Login with Facebook'; } else { echo 'Logout'; }
当他登录时,可以在$user_profile
阵列中找到电子邮件.
希望有所帮助!
您可以从登录用户的个人资料中检索电子邮件地址.这是代码片段
$initMe["appId"], 'secret' => $initMe["appSecret"], )); $facebook->setAccessToken($initMe["accessToken"]); $user = $facebook->getUser(); if ($user) { $user_profile = $facebook->api('/me'); print_r($user_profile["email"]); } ?>
只需在状态返回时添加这些代码块,然后开始传递查询字符串对象{}。对于JavaScript开发人员
初始化您的SDK之后。
步骤1://获取登录状态
$(document).ready(function($) { FB.getLoginStatus(function(response) { statusChangeCallback(response); console.log(response); }); });
如果用户已经登录,这将检查文档加载并获取您的登录状态。
然后调用函数checkLoginState,并将响应传递给statusChangeCallback
function checkLoginState() { FB.getLoginStatus(function(response) { statusChangeCallback(response); }); }
步骤2:让您从状态中获取响应数据
function statusChangeCallback(response) { // body... if(response.status === 'connected'){ // setElements(true); let userId = response.authResponse.userID; // console.log(userId); console.log('login'); getUserInfo(userId); }else{ // setElements(false); console.log('not logged in !'); } }
它还具有被设置为变量的userid,然后调用getUserInfo函数以使用Graph-api获取用户信息。
function getUserInfo(userId) { // body... FB.api( '/'+userId+'/?fields=id,name,email', 'GET', {}, function(response) { // Insert your code here // console.log(response); let email = response.email; loginViaEmail(email); } ); }
在将userid作为参数传递之后,该函数将获取与该userid相关的所有信息。注意:在我的情况下,我正在寻找电子邮件,因为允许我运行只能通过电子邮件登录用户的功能。
//通过电子邮件登录
function loginViaEmail(email) { // body... let token = '{{ csrf_token() }}'; let data = { _token:token, email:email } $.ajax({ url: '/login/via/email', type: 'POST', dataType: 'json', data: data, success: function(data){ console.log(data); if(data.status == 'success'){ window.location.href = '/dashboard'; } if(data.status == 'info'){ window.location.href = '/create-account'; } }, error: function(data){ console.log('Error logging in via email !'); // alert('Fail to send login request !'); } }); }