Laravel社交网站提供商Reddit 429请求太多

时间:2016-05-30 13:51:37

标签: php laravel oauth

我在Ladvel 5.2中使用Reddit的社交网络提供商。为了在身份验证期间解决Reddit错误(“请求太多”),我无法覆盖Socialite Provider方法以向身份验证请求添加自定义标头(“User-Agent”)。

以下是详细信息。

最初的问题是我在使用Reddit进行身份验证时遇到错误:

$response = $this->getHttpClient()->post($this->getTokenUrl(), [
        'headers' => ['Accept' => 'application/json',
            'User-Agent' => 'mydomain.com: v1.0 (by /u/reddituser)'],
        'auth' => [$this->clientId, $this->clientSecret],
        'form_params' => $this->getTokenFields($code),
    ]);

我可以通过修改名为 getAccessToken vendor / socialiteproviders \ reddit \ src \ Provider.php 方法修复错误,以包含名为“User-Agent”的标头。

namespace app\Library\redditOverride;

use SocialiteProviders\Reddit\Provider;

class CustomRedditProvider extends Provider {

    // public function getAccessToken($code)
    public function getAccessToken($code)
    {

       dd('RedditCustomProvider getAccessToken');
       $response = $this->getHttpClient()->post($this->getTokenUrl(), [
        'headers' => ['Accept' => 'application/json',
            'User-Agent' => 'mydomain.com: v1.0 (by /u/reddituser)'],
        'auth' => [$this->clientId, $this->clientSecret],
        'form_params' => $this->getTokenFields($code),
       ]);

       $this->credentialsResponseBody = json_decode($response->getBody(), true);

       return $this->parseAccessToken($response->getBody());
    }
}

此解决方案的问题在于,通过更新供应商文件很容易丢失我的修改。相反,我想扩展Providers类并覆盖getAccessToken方法。

我能够让ServiceProvider注册我的自定义方法,但我似乎无法让自定义方法实际运行代替原始方法。

这是我的代码

app \ Library \ CustomRedditProvider.php(注意永远不会执行的dd)     

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class RedditOverrideServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app['customredditprovider'] = $this->app->share(function($app)
        {
            return new CustomRedditProvider();
        });
    }
}

应用程序/提供者/ RedditOverrrideServiceProvider.php     

\SocialiteProviders\Manager\ServiceProvider::class,
App\Providers\RedditOverrideServiceProvider::class,

配置/ app.php

"autoload": {
    "classmap": [
        "database",
        "app/library"
    ],

composer.json

{{1}}

0 个答案:

没有答案