2015-05-24 6 views
0

Я пытаюсь настроить базовый пример проверки подлинности, используя Dropbox PHP, и я терпит неудачу. Когда я запускаю свой index.php, я перенаправляюсь на вход в Dropbox. Затем, когда я войти в систему, я перенаправлены обратно на dropbox_finish.php и у меня есть state и code например:Dropbox SDK с использованием PHP

?state=bKwCAATDb7A5JLHmCj8wgA%3D%3D&code=YQb8c261HlAAAAAAAAAAXAK1OOk6DqK-RtqnJ_SG0F0 

Чем я получаю эту ошибку в:

[Mon May 25 00:27:39.074399 2015] [:error] [pid 5459] [client 127.0.0.1:44489] PHP Fatal error: Uncaught exception 'Dropbox\Exception_BadRequest' with message 'HTTP status 400\n{"error_description": "Invalid client_id or client_secret", "error": "invalid_client"}' in /var/www/php/oauth/vendor/dropbox/dropbox-sdk/lib/Dropbox/RequestUtil.php:250\nStack trace:\n#0 /var/www/php/oauth/vendor/dropbox/dropbox-sdk/lib/Dropbox/WebAuthBase.php(39): Dropbox\RequestUtil::unexpectedStatus(Object(Dropbox\HttpResponse))\n#1 /var/www/php/oauth/vendor/dropbox/dropbox-sdk/lib/Dropbox/WebAuth.php(270): Dropbox\WebAuthBase->_finish('YQb8c261HlAAAAA...', ' https://oauth.d ...')\n#2 /var/www/php/oauth/web/dropbox_finish.php(4): Dropbox\WebAuth->finish(Array)\n#3 {main}\n thrown in /var/www/php/oauth/vendor/dropbox/dropbox-sdk/lib/Dropbox/RequestUtil.php on line 250

Я пытался установить что-то в качестве основных, можно начать с какого-то времени, без каких-либо результатов. Любая помощь будет оценена.

Это мой код index.php:

include_once __DIR__.'/../app/start.php'; 
include_once __DIR__.'/../app/dropbox_auth.php'; 

start.php Тогда:

session_start(); 
$_SESSION['user_id'] = 1; 
require_once __DIR__.'/../vendor/autoload.php'; 
$key = "fttwagu78r37ped"; 
$secret = "fttwagu78r37ped"; 
$GLOBALS['app_name'] = "oauth-php/1.0"; 
$GLOBALS['redirectURI'] = "https://oauth.dev/dropbox_finish.php"; 
$GLOBALS['HomeURI'] = "https://oauth.dev"; 

$appInfo = new Dropbox\AppInfo($key, $secret); 

//CSRF Cross Site Request Forgery protection. 
$csrfTokenStore = new Dropbox\ArrayEntryStore($_SESSION, 'dropbox-auth-csrf-token'); 

$webAuth = new Dropbox\WebAuth($appInfo, $GLOBALS['app_name'], $GLOBALS['redirectURI'], $csrfTokenStore); 

$db = new PDO('mysql:host=localhost;dbname=oauth','root','root'); 

$user = $db->prepare("SELECT * FROM user WHERE id = :user_id"); 
$user->execute(['user_id' => $_SESSION['user_id']]); 
$user = $user->fetchObject(); 

Файл dropbox_auth.php:

if ($user->token){ 
    $client = new Dropbox\Client($user->token, $GLOBALS['app_name'], 'UTF-8'); 
    $client->getAccountInfo();  
} else { 
    $authURL = $webAuth->start(); 
    header("Location: $authURL"); 
    exit(); 
} 

Dropbox отделка файл dropbox_finish.php:

require_once "../app/start.php"; 
list($accessToken) = $webAuth->finish($_GET); 
$store = $db->prepare("UPDATE user SET token = :dropbox_token" 
     . "WHERE id = :user_id"); 
$store->execute(['dropbox_token' => $accessToken, 
     'user_id' => $_SESSION['user_id']]); 
header("Location: ".$GLOBALS['HomeURI']); 

В качестве дополнительной детали, просто сказать, что у меня есть это в MySQL:

+--------------------+ 
| Database   | 
+--------------------+ 
| oauth    | 

+-----------------+ 
| Tables_in_oauth | 
+-----------------+ 
| user   | 
+-----------------+ 

+----+--------------------+-------+ 
| id | username   | token | 
+----+--------------------+-------+ 
| 1 | [email protected] |  | 
+----+--------------------+-------+ 

Что я делаю неправильно? thx.

+1

Вы уверены, что ваш идентификатор клиента или секрет клиента верны? –

+0

Вы правы в этом, секрет был неправильным, теперь я получаю эту ошибку: '[Mon May 25 02: 07: 49.303137 2015] [: error] [pid 5457] [client 127.0.0.1:45996] PHP Warning : PDOStatement :: execute(): SQLSTATE [HY093]: недопустимый номер параметра: количество связанных переменных не совпадает с числом токенов в /var/www/php/oauth/web/dropbox_finish.php в строке 7' – wti

+0

, пожалуйста, примите ответьте как правильно. Это другой вопрос. –

ответ

1

Вы уверены, что ваш идентификатор клиента или секрет клиента верны? Ошибка ясно говорит, что один из них ошибочен.