找不到类'\ Laravel \ Socialite \ Two \ TwitterProvider'错误

时间:2019-05-21 11:40:09

标签: laravel twitter-oauth classnotfoundexception laravel-socialite

我正在做一些变通办法,以允许用户将他们的社交媒体帐户链接到我们的应用程序,以及使用他们的社交媒体帐户直接创建一个帐户。 对于用户的社交媒体帐户的链接,我遵循了此策略here,因为如果我也直接使用该策略来创建他们的帐户,则会遇到很多错误。因此,目前,代码适用于Twitter,但Twitter除外,因为它返回错误:

  

类'\ Laravel \ Socialite \ Two \ TwitterProvider'

所以在我的网络路线中,我有这个:

// Link SNS
Route::post('/redirect/{provider}', 'User\SocialMediaController@linkMedia');
Route::get('/callback/link/{provider}', 'User\SocialMediaController@saveMedia')->name('socialLinkCallback');

在我的SocialMediaController文件中,我有这个:

use CanbuildSocialProvider;
/**
 *
 * link SNS
 *
 */
public function linkMedia(Request $request)
{
    $provider = $request->route('provider');
    $this->provider = $provider;
    $redirectUrl = url('/callback/link/' . $provider);

    return $this->buildSocialProvider($redirectUrl)->redirect();
}

还有我的twitter api设置,我已经添加了回调URL。这是显示的完整错误消息:

enter image description here

请注意,我已经使用了链接上提供的特征。在facebook和Google中,除twitter之外的代码都运行良好。有人碰巧知道这是什么原因吗?

更新

正如我从vendor>laravel>socialite>src>SocialiteManager.php中所检查的那样,Twitter正在使用\Laravel\Socialite\One\AbstractProvider,而其他人正在使用\Laravel\Socialite\Two\AbstractProvider。有什么办法可以在这里覆盖它:

public function buildSocialProvider(string $redirectUrl = null): ProviderInterface
{
    $providerClass = ucfirst($this->provider);
    $provider = strtoupper($this->provider);

    $config = [
        'client_id' => env($provider . '_CLIENT_ID'),
        'client_secret' => env($provider. '_CLIENT_SECRET'),
        'redirect' => $redirectUrl,
    ];

    return Socialite::buildProvider('\Laravel\Socialite\Two\\' . $providerClass . 'Provider', $config);
}

1 个答案:

答案 0 :(得分:0)

您已将以下内容添加到config / services.php中,请按照本教程https://medium.com/@Alabuja/social-login-in-laravel-with-socialite-90dbf14ee0ab

'twitter' => [
        'client_id'     => env('TWITTER_CLIENT_ID'),
        'client_secret' => env('TWITTER_CLIENT_SECRET'),
        'redirect'      => env('TWITTER_URL'),
    ],