当前位置:  开发笔记 > 编程语言 > 正文

Facebook Graph API,如何让用户收到电子邮件?

如何解决《FacebookGraphAPI,如何让用户收到电子邮件?》经验,为你挑选了6个好方法。

我正在使用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身份验证.



1> Gazler..:

获取用户电子邮件地址的唯一方法是请求电子邮件字段的扩展权限.用户必须允许您查看此内容,并且无法获取用户朋友的电子邮件地址.

http://developers.facebook.com/docs/authentication/permissions

如果您通过在调用Auth Dialog的get字符串中传递scope = email来使用Facebook连接,则可以执行此操作.

我建议使用SDK而不是file_get_contents,因为它可以更容易地执行Oauth身份验证.


基于这个答案,对我来说并不是很明显......如果你使用的是JavaScript API,你想使用`FB.api('/ me?scope = email',function(apiResponse){... });`
没关系,我想通了:$ facebook-> getLoginUrl(array('req_perms'=>'email'))

2> masakielasti..:
// 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']
);


/ me?locale = en_US&fields = name,电子邮件是我唯一想办法让它返回电子邮件地址,找不到任何其他在线参考
是否有某个描述`/ me`路线的参考页面?我一直在浏览[Graph API](https://developers.facebook.com/docs/graph-api/reference)上的页面,但无法在任何地方找到它:(

3> Kaletha..:

打开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'));
}



4> Quentin..:

要获取用户电子邮件,您必须使用该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阵列中找到电子邮件.

希望有所帮助!



5> 小智..:

您可以从登录用户的个人资料中检索电子邮件地址.这是代码片段

 $initMe["appId"],
      'secret' => $initMe["appSecret"],
    ));

    $facebook->setAccessToken($initMe["accessToken"]);
    $user = $facebook->getUser();

    if ($user) {
        $user_profile = $facebook->api('/me');
        print_r($user_profile["email"]);
    }
?>


这不适合我.`$ user_profile`不包含电子邮件

6> Delino..:

只需在状态返回时添加这些代码块,然后开始传递查询字符串对象{}。对于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 !');
      }
    });
  }

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有