Я использую Laravel 5.0 и пытаюсь авторизовать с Dropbox. Я свободно следую этому примеру: http://dropbox.github.io/dropbox-sdk-php/api-docs/v1.1.x/class-Dropbox.WebAuth.htmlLaravel и Dropbox WebAuth: «Отсутствует токен CSRF в сеансе»
Когда я иду/начинаю. Я перенаправляюсь в Dropbox и нажимаю «Разрешить», но когда я перенаправляюсь обратно/заканчиваю, я продолжаю получать пропущенный токен CSRF в сеансе. У кого-нибудь есть идеи? Я читал, что $_SESSION
не работает в Laravel, но я не уверен, как еще это сделать.
Вот код, я работаю с:
public function start()
{
$authorizeUrl = $this->getWebAuth()->start();
return redirect()->away($authorizeUrl);
}
public function finish()
{
$test = $this->getWebAuth()->finish($_GET);
dd($test);
}
private function getWebAuth()
{
$appKey = 'key';
$appSecret = 'secret';
$appName = 'name';
$appRedirect = 'http://example.com/finish';
$appInfo = new Dropbox\AppInfo($appKey, $appSecret);
$csrfTokenStore = new Dropbox\ArrayEntryStore($_SESSION, 'dropbox-auth-csrf-token');
$webAuth = new Dropbox\WebAuth($appInfo, $appName, $appRedirect, $csrfTokenStore);
return $webAuth;
}
Update 1:
Хорошо, так что я пытался получить его работы с Laravel Socialite и Dropbox Socialite provider. Я изменил свой код на то, что ниже, но я получаю сообщение об ошибке, когда я нажимаю/запускаю. Driver [dropbox] not supported
. Я действительно запутался в инструкциях step 3, так что, возможно, я сделал там что-то не так.
composer.json
"require": {
"laravel/framework": "5.0.*",
"dropbox/dropbox-sdk": "1.1.*",
"laravel/socialite": "~2.0",
"socialiteproviders/dropbox": "~1.0"
},
Контроллер
use Socialite;
class ExampleController extends Controller {
public function start()
{
return Socialite::with('dropbox')->redirect();
}
public function finish()
{
$user = Socialite::with('dropbox')->user();
dd($user->token);
}
}
конфигурации/app.php
'providers' => [
//'Laravel\Socialite\SocialiteServiceProvider',
'SocialiteProviders\Manager\ServiceProvider',
],
'aliases' => [
'Socialite' => 'Laravel\Socialite\Facades\Socialite',
],
приложение/Провайдеры/EventServiceProvider.php
protected $listen = [
'SocialiteProviders\Manager\SocialiteWasCalled' => [],
];
Update 2:
я понял это, я добавил это, и это сработало.
приложение/Поставщики/EventServiceProvider.php
protected $listen = [
'SocialiteProviders\Manager\SocialiteWasCalled' => [
'SocialiteProviders\Dropbox\[email protected]',
],
];
Это для Laravel 4. В Laravel 5 создание пользовательского адаптера для Socialite, вероятно, лучше. – ceejayoz
Я только что обновил ссылку на версию Laravel 5. – Blaatpraat
Спасибо. https://packagist.org/packages/socialiteproviders/dropbox - это поставщик социальных услуг, который может быть лучше в 5. – ceejayoz