【发布时间】:2019-10-07 19:14:18
【问题描述】:
我正在做一些解决方法,以允许用户将他们的社交媒体帐户链接到我们的应用程序,以及使用他们的社交媒体帐户直接创建一个帐户。 我已经按照here 这个策略链接用户的社交媒体帐户,如果我也使用它直接创建他们的帐户,我有一堆错误。所以现在,除了 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。这是显示的完整错误消息:
请注意,我使用了链接中提供的特征。在 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);
}
【问题讨论】:
-
你在控制器的命名空间下面声明了吗?
-
@BradGoldsmith 根据我的检查,Twitter 使用的是
\Laravel\Socialite\One\\TwitterProvider,而其他 SNS 使用的是\Laravel\Socialite\Two\\TwitterProvider在SocialiteManager.php文件中,你碰巧知道解决这个 Twitter 错误的方法吗?
标签: laravel twitter-oauth classnotfoundexception laravel-socialite