使用 Facebook 登录我的应用

Posted

技术标签:

【中文标题】使用 Facebook 登录我的应用【英文标题】:Using Facebook to log in to my app 【发布时间】:2017-09-08 10:29:58 【问题描述】:

我想为我的应用集成可选的 Facebook 登录。我的数据库中已经存储了一个用户配置文件。当我将当前个人资料链接到 Facebook 帐户时,我应该在我的服务器上存储什么?

我想做的只是将 Facebook 用户的 ID 存储在我的数据库中的用户个人资料中。这样,当有人通过 Facebook 登录时,我可以获取他们的 Facebook 用户 ID,并将其与数据库中的个人资料相匹配并检索。还有什么我应该储存的吗?

谢谢!

【问题讨论】:

完全取决于您的用例,如果您想显示用户名、个人资料图片等。 不,只存储用户 ID - 如果您需要更多,则存储更多。但 id 足以识别用户。 好的,谢谢!是的,我也可能会收到电子邮件地址,只是以前从未这样做过,所以不完全确定! 唯一需要注意的是,UID 是应用范围的,因此如果您有 2 个不同的应用,用户 ID 会有所不同:developers.facebook.com/docs/apps/faq/#app-scoped-ids 如果应用连接到同一个应用,您仍然可以匹配用户业务:developers.facebook.com/docs/apps/for-business 【参考方案1】:

是的,您可以存储来自 facebook 登录回调的电子邮件和姓名。

public function fb_login_back()

    $this->load->library('Fb_login');

    $info=$this->fb_login->login_callback();        

    if(is_array($info) && !empty($info) && isset($info["email"]) && isset($info["name"]))
    


        if(!$this->basic->is_exist("users",array("email"=>$info["email"])))
        
            $insert_data=array
            (
                "email"=>$info["email"],
                "name"=>$info["name"],
                "user_type"=>"Member",
                "status"=>"1",
                "add_date"=>date("Y-m-d H:i:s"),
                "package_id"=>$package_id,
                "expired_date"=>$expiry_date,
                "activation_code"=>"",
                "deleted"=>"0"
            );
            $this->basic->insert_data("users",$insert_data);
        


        $table = 'users';
        $where['where'] = array('email' => $info["email"], "deleted" => "0","status"=>"1");

        $info = $this->basic->get_data($table, $where, $select = '', $join = '', $limit = '', $start = '', $order_by = '', $group_by = '', $num_rows = 1);


        $count = $info['extra_index']['num_rows'];

        if ($count == 0) 
        
            $this->session->set_flashdata('login_msg', $this->lang->line("invalid email or password"));
            redirect("home/login_page");
         
        else 
        
            $username = $info[0]['name'];
            $user_type = $info[0]['user_type'];
            $user_id = $info[0]['id'];

            $this->session->set_userdata('logged_in', 1);
            $this->session->set_userdata('username', $username);
            $this->session->set_userdata('user_type', $user_type);
            $this->session->set_userdata('user_id', $user_id);
            $this->session->set_userdata('download_id', time());
            $this->session->set_userdata('expiry_date',$info[0]['expired_date']);

            // for getting usable facebook api

            $this->basic->update_data("users",array("id"=>$user_id),array("last_login_at"=>date("Y-m-d H:i:s")));

            if ($this->session->userdata('logged_in') == 1 && $this->session->userdata('user_type') == 'Admin') 
            
                redirect('facebook_ex_dashboard/index', 'location');
            
            if ($this->session->userdata('logged_in') == 1 && $this->session->userdata('user_type') == 'Member') 
                  
                redirect('facebook_ex_dashboard/index', 'location');
            
                    
    

还有类似的库函数

公共函数 login_callback() session_start();

    $fb = new Facebook\Facebook([
      'app_id' => $this->app_id, // Replace app-id with your app id
      'app_secret' => $this->app_secret,
      'default_graph_version' => 'v2.2',
    ]);

    $user=array();

    $helper = $fb->getRedirectLoginHelper();
        try 
          $accessToken = $helper->getAccessToken();
           $response = $fb->get('/me?fields=id,name,email', $accessToken);
            $user = $response->getGraphUser()->asArray();
         catch(Facebook\Exceptions\FacebookResponseException $e) 

         return $user;

         catch(Facebook\Exceptions\FacebookSDKException $e) 
            $user['status']="0";
            $user['message']= $e->getMessage();
            return $user;
                       

 return $user;      

【讨论】:

以上是关于使用 Facebook 登录我的应用的主要内容,如果未能解决你的问题,请参考以下文章

Cordova / Phonegap 应用程序 - 更改 Facebook 帐户

Facebook 登录 Parse.com 的最低权限

在 OCUnit 应用程序测试中绕过登录/身份验证

使用 Parse 登录 Facebook 不起作用

使用 facebook api 从我的应用程序中的 facebook 注销问题

Facebook 请求配置文件 Graph API 无法在 iOS 7 本机 facebook 上未登录