如何使用Facebook作为我的网站的门户

时间:2015-07-01 08:49:20

标签: php mysql facebook facebook-graph-api facebook-login

我有一个网站(php,mysql),用户可以通过表格和方式注册到数据库。通过登录表单登录。

或者我有一个Facebook登录按钮,我想让用户:

  1. 只需点击
  2. 即可
  3. 将他们引导至Facebook
  4. 接受我的网站权限
  5. 将它们重定向回我的网站,完全登录后可以使用该网站的功能。
  6. 我目前有以下代码发送上述内容,除了实际将其数据存入/存储在我的数据库中之外:

    <?php
    session_start();
    
    if(isset($_GET['logout_fb'])){
        session_destroy();
    }
    
    define('FACEBOOK_SDK_V4_SRC_DIR', '../../inc/lib/fb/src/Facebook/');
    require __DIR__ . './../../inc/lib/fb/autoload.php';
    
    use Facebook\FacebookSession;
    use Facebook\FacebookRedirectLoginHelper;
    use Facebook\FacebookRequest;
    use Facebook\FacebookResponse;
    use Facebook\FacebookSDKException;
    use Facebook\FacebookRequestException;
    use Facebook\FacebookAuthorizationException;
    use Facebook\GraphObject;
    use Facebook\HttpClients\FacebookCurl;
    use Facebook\HttpClients\FacebookHttpable;
    use Facebook\HttpClients\FacebookCurlHttpClient;
    use Facebook\Entities\AccessToken;
    use Facebook\GraphUser;
    
    $app_id = 'app_id';
    $app_secret = 'app_secret';
    
    FacebookSession::setDefaultApplication($app_id, $app_secret);
    // login helper with redirect_uri
    $helper = new FacebookRedirectLoginHelper('http://www.test.com/tests/fb_test/facebook-sdk-test.php');
    
    try {
      $session = $helper->getSessionFromRedirect();
    } catch( FacebookRequestException $ex ) {
      // When Facebook returns an error
    } catch( Exception $ex ) {
      // When validation fails or other local issues
    }
    
    // see if we have a session
    if ( isset( $session ) ) {
      // graph api request for user data
      $request = new FacebookRequest( $session, 'GET', '/me' );
      $response = $request->execute();
      // get response
      $graphObject = $response->getGraphObject();
    
      // print data
      echo  print_r( $graphObject, 1 );
    } 
    else {
      // show login url
      echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
    }
    ?>
    

    以上返回以下输出:

    Facebook\GraphObject Object ( [backingData:protected] => Array ( [id] => test_id [email] => test@email.co.uk [first_name] => Test [gender] => male [last_name] => Name [link] => https://www.facebook.com/app_scoped_user_id/user_id/ [locale] => en_GB [name] => Test Name [timezone] => 1 [updated_time] => 2015-06-06T13:31:40+0000 [verified] => 1 ) )
    

    如何进一步提升我的申请,以便用户可以:

    • 查看他们的名字,个人资料图片的方式与我在网站上使用的方式相同
    • 将他们的信息存储在网站数据库中,以便可以轻松地再次检索(如果不是我需要的话,这是否需要?)
    • 注销

    任何人都可以描述我所说的解决方案。我正在努力理解所需的逻辑,创建这种进入我网站的其他方式。

    感谢。

1 个答案:

答案 0 :(得分:0)

通常推荐的方法是将(1)user(2)登录方法分开。所以不要思考&#34;如果他们通过Facebook登录,我如何显示用户的个人资料图片?&#34;只是思考&#34;如何显示用户的个人资料图片?&#34;。

例如,您可能有一个&#34;用户&#34;表(包括姓名,用户名等)和&#34; auth&#34;表。如果用户使用用户名/密码注册,那么&#34; auth&#34; table将有一个带有(哈希)密码的行。如果他们使用Facebook登录,那么&#34; auth&#34; table将有一行包含他们的Facebook用户ID和访问令牌。

这两个(或更多)登录方法可以一起使用。例如,他们可能已使用用户名和密码进行了注册。但他们回到您的网站并使用Facebook登录。您只需在&#34; auth&#34;中添加一行即可。用户表,现在他们可以使用密码 Facebook登录。

那么,我如何将Facebook登录添加到您的网站?

登录后,当用户从Facebook重定向到您的网站时:

  1. 使用访问令牌呼叫/me以验证它并获取用户的ID
  2. 如果auth表包含此Facebook用户的行,则将其登录(例如,通常按照正常方式创建会话)
  3. 如果auth表格中没有包含Facebook用户的行,则创建一个新的user行和auth行(您可能需要显示一个表单并询问他们确认一些细节,如姓名/电子邮件/照片)