使用 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 帐户