Sta*_*see 5 php dropbox laravel-5
我正在使用Laravel 5.0,并尝试使用Dropbox进行授权。我大致遵循以下示例:http : //dropbox.github.io/dropbox-sdk-php/api-docs/v1.1.x/class-Dropbox.WebAuth.html
当我去/开始。我被重定向到Dropbox并单击“允许”,但是当我被重定向回/ finish时,我在会话中不断收到Missing 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;
}
Run Code Online (Sandbox Code Playgroud)
更新1:
好的,所以我尝试与Laravel Socialite和Dropbox Socialite提供程序一起使用。我将代码更改为以下代码,但按/ start时出现错误。Driver [dropbox] not supported。我对说明的第3步感到非常困惑,所以也许我在这里做错了。
composer.json
"require": {
"laravel/framework": "5.0.*",
"dropbox/dropbox-sdk": "1.1.*",
"laravel/socialite": "~2.0",
"socialiteproviders/dropbox": "~1.0"
},
Run Code Online (Sandbox Code Playgroud)
控制者
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);
}
}
Run Code Online (Sandbox Code Playgroud)
config / app.php
'providers' => [
//'Laravel\Socialite\SocialiteServiceProvider',
'SocialiteProviders\Manager\ServiceProvider',
],
'aliases' => [
'Socialite' => 'Laravel\Socialite\Facades\Socialite',
],
Run Code Online (Sandbox Code Playgroud)
app / Providers / EventServiceProvider.php
protected $listen = [
'SocialiteProviders\Manager\SocialiteWasCalled' => [],
];
Run Code Online (Sandbox Code Playgroud)
更新2:
我弄清楚了,我添加了它,它奏效了。
app / Providers / EventServiceProvider.php
protected $listen = [
'SocialiteProviders\Manager\SocialiteWasCalled' => [
'SocialiteProviders\Dropbox\DropboxExtendSocialite@handle',
],
];
Run Code Online (Sandbox Code Playgroud)
如果您有一个可以为您完成此操作的包装器,为什么要重新发明轮子:
https://github.com/GrahamCampbell/Laravel-Dropbox
原因是 POST 路由受到保护CSRF. 如果您不想使用包装器,则需要禁用此安全层,但没有人会建议这样做。
更好的是使用Laravel Socialite。唯一的事实是,Dropbox 本身并不支持,但这个包将解决这个问题。
感谢ceejayoz对此提供的帮助!