facebook sdk getuser()登录后总是返回0?

时间:2017-03-31 06:05:24

标签: php codeigniter

以下是我的控制器。我正在尝试使用facebook php sdk登录。其中getuser()函数在登录后始终返回0。有什么问题?

<?php defined('BASEPATH') OR exit('No direct script access allowed');
class User_Authentication extends CI_Controller
{
    function __construct() {
        parent::__construct();
        // Load user model
        $this->load->model('user');
    }

    public function index(){

       // Include the facebook api php libraries
        include_once APPPATH."libraries/facebook-api-php-codexworld/facebook.php";

        // Facebook API Configuration
        $appId = '1863771173889202';
        $appSecret = 'e86b25ccab12bc88c46aac322ebc40eb';
        $redirectUrl = base_url() . 'user_authentication/';
        $fbPermissions = 'email';

        //Call Facebook API
        $facebook = new Facebook(array(
          'appId'  => $appId,
          'secret' => $appSecret

        ));
        $fbuser = $facebook->getUser();

        if ($fbuser) {
            $userProfile = $facebook->api('/me?fields=id,first_name,last_name,email,gender,locale,picture');
            // Preparing data for database insertion
            $userData['oauth_provider'] = 'facebook';
            $userData['oauth_uid'] = $userProfile['id'];
            $userData['first_name'] = $userProfile['first_name'];
            $userData['last_name'] = $userProfile['last_name'];
            $userData['email'] = $userProfile['email'];
            $userData['gender'] = $userProfile['gender'];
            $userData['locale'] = $userProfile['locale'];
            $userData['profile_url'] = 'https://www.facebook.com/'.$userProfile['id'];
            $userData['picture_url'] = $userProfile['picture']['data']['url'];
            // Insert or update user data
            $userID = $this->user->checkUser($userData);
            if(!empty($userID)){
                $data['userData'] = $userData;
                $this->session->set_userdata('userData',$userData);
            } else {
               $data['userData'] = array();
            }
        } else {
            $fbuser = '';
            $data['authUrl'] = $facebook->getLoginUrl(array('redirect_uri'=>$redirectUrl,'scope'=>$fbPermissions));
        }
        $this->load->view('user_authentication/index',$data);
    }

    public function logout() {
        $this->session->unset_userdata('userData');
        $this->session->sess_destroy();
        redirect('/user_authentication');
    }
}

我是初学者,请帮我解决问题。

2 个答案:

答案 0 :(得分:0)

我认为您需要检查 redirect_uri 并在其中输入正确的网址。     以下是我认为它可以帮助您的代码行:

$loginUrl = $facebook->getLoginUrl(array ( 
'display' => 'popup',
'redirect_uri' => 'http://localhost/demo/index.php'
));

答案 1 :(得分:0)

在window.fbAsyncInit中我已将cookie和oauth设置为true,这很有效!

饼干:真,
oauth:是的。

确保在你的php中你也有

饼干&#39; =&GT;真。

这将使PHP代码能够与JS集成。

您需要确保用户已登录:

$ loginUrl = $ facebook-&gt; getLoginUrl(array(&#39; scope&#39; =&gt;&#39; read_stream等...&#39;));

范围由此处声明的权限定义

之后你应该能够做到:

$ user = $ facebook-&gt; api(&#34; / me&#34;);

哪个会获得与该用户相关联的数组,$ user [&#39; id&#39;]可能是您想要存储的数据以及任何其他信息,例如电子邮件地址 - 请务必请求范围内的电子邮件

希望能解决问题!