我正在做一些变通办法,以允许用户将他们的社交媒体帐户链接到我们的应用程序,以及使用他们的社交媒体帐户直接创建一个帐户。 对于用户的社交媒体帐户的链接,我遵循了此策略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。这是显示的完整错误消息:
请注意,我已经使用了链接上提供的特征。在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);
}
答案 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'),
],