简体   繁体   English

Facebook SDK PHP 5.0 getLoginUrl()错误500

[英]Facebook SDK PHP 5.0 getLoginUrl() Error 500

I am trying to use the examples provided under Facebook PHP SDK 5.0 to login to Facebook. 我正在尝试使用Facebook PHP SDK 5.0下提供的示例登录Facebook。 I am getting back 500 Internal Server Error. 我收到500内部服务器错误。 I am using the Baby Plan from HostGator which is running Php 5.5.27 PHP INFO . 我正在使用HostGator的婴儿计划,该计划运行PHP 5.5.27 PHP INFO Is there configuration I would need to add to my server to get things working? 是否有配置我需要添加到我的服务器以使工作正常?

login.php 的login.php

<?php
session_start();
// Include the required dependencies.
require_once( 'vendor/autoload.php' );
// Initialize the Facebook PHP SDK v5.
$fb = new Facebook\Facebook([
  'app_id'                => '495994870548274',
  'app_secret'            => '593f18b375c9e23d34b9794136cf7158',
  'default_graph_version' => 'v2.3',
]);

$helper = $fb->getRedirectLoginHelper();

$permissions = ['email']; // Optional permissions
$loginUrl = $helper->getLoginUrl('http://techcomsgb.com/kidneytest/login-callback.php', $permissions);

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

login-callback.php 登录-callback.php

<?php
session_start();

// Include the required dependencies.
require_once( 'vendor/autoload.php' );



// Initialize the Facebook PHP SDK v5.
$fb = new Facebook\Facebook([
  'app_id'                => '495994870548274',
  'app_secret'            => '593f18b375c9e23d34b9794136cf7158',
  'default_graph_version' => 'v2.3',
]);

$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($config['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: " . $helper-    >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 '); // header('Location: https//example.com/members.php ');

I had this error too. 我也有这个错误。 Most of the things was in the hosting side . 大多数事情都在托管方面 I fixed by doing some things. 我做了一些事情。

  1. Check the hosting PHP version 5.4 or higher 检查托管PHP版本5.4或更高版本
  2. Check mbstring enabled 检查mbstring是否已启用
  3. Set mbstring values in the php.ini php.ini中设置mbstring值

MBString Values Sample Image MBString值示例图像

See more: https://benmarshall.me/facebook-php-sdk/#requirements 查看更多: https//benmarshall.me/facebook-php-sdk/#requirements

Then, in the callback.php Facebook Exceptions wasn't working so I change it to the PHP Exception Method like this: 然后,在callback.php Facebook Exceptions无效,所以我将其更改为PHP异常方法,如下所示:

try {
    $accessToken = $helper->getAccessToken();  
} catch(Exception $e) {
    // There was an error communicating with Graph  
    echo $e->getMessage();       
    exit;  
}

Then I get the error message. 然后我收到错误消息。 It was the date.timezone, I added in the php.ini file and now everything is working. 这是date.timezone,我在php.ini文件中添加了,现在一切正常。

[date] date.timezone = "America/Los_Angeles"

简单错误,login-callback.php上的文件权限不正确

It's because you forgot to place an app-id in this section: 这是因为您忘记在此部分中放置app-id

    // 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();

Replace the {app-id} with your ID and then it should work. {app-id}替换为您的ID,然后它应该有效。 I'm surprised no one on Facebook pointed this out. 我很惊讶Facebook上没有人指出这一点。

For me it was the link returned by $helper->getLoginUrl() , so I just replaced https://www.facebook.com/v2.8/dialog/oauth with https://graph.facebook.com/oauth/authorize . 对我来说,这是$helper->getLoginUrl()返回的链接,所以我只用https://graph.facebook.com/oauth/替换了https://www.facebook.com/v2.8/dialog/oauth授权

 $login_url = $login_helper->getLoginUrl('www.yoururl.com/fb-callback.php'), $permissions);
 $login_url = str_replace('https://www.facebook.com/v2.8/dialog/oauth?', 'https://graph.facebook.com/oauth/authorize?', $login_url);

Look at this post for reference Facebook oauth authorize URL and parameter options 请看这篇文章以供参考Facebook oauth授权URL和参数选项

"when you want to build the login flow manually you should use /oauth/authorize.. else if you are using javascript/Apps api provided by facbook it uses /dialog/oauth" “当你想手动构建登录流程时,你应该使用/ oauth / authorize .. else如果你正在使用它使用/ dialog / oauth的facbook提供的javascript / Apps api”

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM