Đăng nhập bằng api Facebook với PHP

Đăng nhập bằng api Facebook với PHP

Khi bạn phát triển 1 website nào đấy, tính năng đăng nhập là rất quan trọng, tích hợp tính năng đăng nhập bằng MXH càng thuận tiện hơn cho người sử dụng. Sau đây chính là 1 ví dụ đăng nhập Facebook bằng PHP. Trong ví dụ sau đây, những lệnh PHP thực hiện đăng nhập nằm trong file /logIn.php. Link mà Facebook chuyển hướng người sử dụng tới sau hộp thoại đăng nhập nằm trong file /fb-callback.php.

Chú ý: Mọi URL callback đều phải nằm trong danh sách URI chuyển hướng OAuth hợp lệ bằng cách đi đến Bảng điều khiển ứng dụng, chọn ứng dụng của các bạn và đi đến Sản phẩm > Đăng nhập Facebook > Cài đặt ở trong Cài đặt OAuth ứng dụng và nhập vào đó.

Trước hết bạn cần tạo 1 ứng dụng fb. Đầu tiên bạn truy cập trang https://developers.facebook.com/ và tạo 1 ứng dụng mới.

Sau đó chọn Add new app, bạn nhập tên ứng dụng mà các bạn muốn và e mail rồi nhấn “Create an app ID”.

Chọn thêm Product là “Facebook Login”

Chọn Setting->Basic info. Tại đây bạn chú ý 2 phần App IDSecret ID sẽ điền vào phần sau.

Đây chính là phần Cài đặt OAuth ứng dụng mình nhắc tới ở phần Chú ý trên, nhập các URL vào khung UI legitimate redirect URI.

login.php

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

$helper = $fb->getRedirectLoginHelper();

$permissions = ['email']; // Optional permissions
$loginUrl = $helper->getLoginUrl('https://example.com/fb-callback.php', $permissions);

echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>';

 

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

$helper = $fb->getRedirectLoginHelper();

try {
  $accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
  // When Graph returns an error
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  // When validation fails or other local issues
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

if (! isset($accessToken)) {
  if ($helper->getError()) {
    header('HTTP/1.0 401 Unauthorized');
    echo "Error: " . $helper->getError() . "\n";
    echo "Error Code: " . $helper->getErrorCode() . "\n";
    echo "Error Reason: " . $helper->getErrorReason() . "\n";
    echo "Error Description: " . $helper->getErrorDescription() . "\n";
  } else {
    header('HTTP/1.0 400 Bad Request');
    echo 'Bad request';
  }
  exit;
}

// Logged in
echo '<h3>Access Token</h3>';
var_dump($accessToken->getValue());

// The OAuth 2.0 client handler helps us manage access tokens
$oAuth2Client = $fb->getOAuth2Client();

// Get the access token metadata from /debug_token
$tokenMetadata = $oAuth2Client->debugToken($accessToken);
echo '<h3>Metadata</h3>';
var_dump($tokenMetadata);

// Validation (these will throw FacebookSDKException's when they fail)
$tokenMetadata->validateAppId('{app-id}'); // Replace {app-id} with your app id
// If you know the user ID this access token belongs to, you can validate it here
//$tokenMetadata->validateUserId('123');
$tokenMetadata->validateExpiration();

if (! $accessToken->isLongLived()) {
  // Exchanges a short-lived access token for a long-lived one
  try {
    $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
  } catch (Facebook\Exceptions\FacebookSDKException $e) {
    echo "<p>Error getting long-lived access token: " . $e->getMessage() . "</p>\n\n";
    exit;
  }

  echo '<h3>Long-lived</h3>';
  var_dump($accessToken->getValue());
}

$_SESSION['fb_access_token'] = (string) $accessToken;

// User is logged in with a long-lived access token.
// You can redirect them to a members-only page.
//header('Location: https://example.com/members.php');

 

nguyen tran

Leave a Reply

Your email address will not be published. Required fields are marked *