【发布时间】:2022-01-27 15:09:46
【问题描述】:
我目前正在使用 twitter 开发社交监听 API,登录用户的流程(使用基本 API 令牌向 API 发送请求)被重定向到 twitter 应用程序并通过 Laravel Socialite 提供的重定向链接登录到 twitter 帐户.成功登录后,账号信息将与注册账号的用户一起保存在 MySQL 中。
我正在使用 Laravel 7 和 Socialite v5.4.0
我一直在尝试使用以下方法在回调 url 中提供查询参数:
Socialite::driver('twitter')
->redirectUrl('https://some-site-url.com/twitter/login/callback?api_token={sample-token}')
->redirect()->getTargetUrl());
但社交名流返回错误Call to undefined method Laravel\\Socialite\\One\\TwitterProvider::redirectUrl()",
那时我意识到当前使用的 twitter 提供程序正在使用 Oauth1 Laravel\Socialite\One\TwitterProvider。当我查看Laravel\Socialite\\SocialiteManager.php 中的供应商时,它的创建实例如下:
/**
* Create an instance of the specified driver.
*
* @return \Laravel\Socialite\One\AbstractProvider
*/
protected function createTwitterDriver()
{
$config = $this->config->get('services.twitter');
return new TwitterProvider(
$this->container->make('request'), new TwitterServer($this->formatConfig($config))
);
}
但在同一个Laravel\Socialite\\SocialiteManager.php 中,它也有创建 Oauth2 实例的方法,如下所示:
/**
* Create an instance of the specified driver.
*
* @return \Laravel\Socialite\Two\AbstractProvider
*/
protected function createTwitterOAuth2Driver()
{
$config = $this->config->get('services.twitter');
return $this->buildProvider(
TwitterOAuth2Provider::class, $config
);
}
问题
现在我的问题是如何强制 Socialite::driver('twitter') 方法使用 Oauth2 而不是基本上在 Socialite 本身中可用的 Oauth1 ?我试图重写该方法,但没有找到指向哪个实例正在调用SocialiteManager.php 的链接,所以目前我只尝试修改供应商函数以返回 Oauth2 AbstractProvider(我知道它非常丑陋的方法,但我真的很好奇),它是这样的:
// /**
// * Create an instance of the specified driver.
// *
// * @return \Laravel\Socialite\One\AbstractProvider
// */
// protected function createTwitterDriver()
// {
// $config = $this->config->get('services.twitter');
// return new TwitterProvider(
// $this->container->make('request'), new TwitterServer($this->formatConfig($config))
// );
// }
/**
* Create an instance of the specified driver.
*
* @return \Laravel\Socialite\Two\AbstractProvider
*/
protected function createTwitterDriver()
{
$config = $this->config->get('services.twitter');
return $this->buildProvider(
TwitterOAuth2Provider::class, $config
);
}
.该方法有效,它成功返回了重定向 url,但由于未知原因未能登录到 Twitter 页面,这让我想到有没有办法在 Oauth1 和 Oauth2 之间干净地切换社交名流提供者版本。或者是否有任何替代方法可以提供带有用户标识符的回调?
the url return after i ditch the method in vendor SocialiteManager.php But failed to log in to twitter app for unknown reason
提前感谢,这是我的第一个问题,从昨天开始我一直在寻找答案,但没有找到在版本 1 和版本 2 之间切换社交名流提供商的具体方法
【问题讨论】:
标签: php laravel laravel-socialite