Laravel 5.5 socialite integration 显示错误 formatRedirectUrl() must be of the type array, null given
Posted
技术标签:
【中文标题】Laravel 5.5 socialite integration 显示错误 formatRedirectUrl() must be of the type array, null given【英文标题】:Laravel 5.5 socialite integration shows error formatRedirectUrl() must be of the type array, null given 【发布时间】:2018-05-02 02:37:01 【问题描述】:我正在使用 "laravel/socialite": "^3.0" 来登录 Facebook。但它显示 一个错误
类型错误:传递给 Laravel\Socialite\SocialiteManager::formatRedirectUrl() 的参数 1 必须是数组类型,给定 null,在 /var/www/html/mas/vendor/laravel/socialite/src/SocialiteManager 中调用.php。
当我在登录控制器中调用以下函数时会发生这种情况
public function socialLogin($social)
return Socialite::driver($social)->redirect();
【问题讨论】:
【参考方案1】:您好,您没有提供社交媒体的凭据,请将其放在 config/services.php 中
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('CALLBACK_URL_FACEBOOK'),
],
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('CALLBACK_URL_GOOGLE'),
],
'twitter' => [
'client_id' => env('TWITTER_CLIENT_ID'),
'client_secret' => env('TWITTER_CLIENT_SECRET'),
'redirect' => env('CALLBACK_URL_TWITTER'),
],
'linkedin' => [
'client_id' => env('LINKEDIN_CLIENT_ID'),
'client_secret' => env('LINKEDIN_CLIENT_SECRET'),
'redirect' => env('CALLBACK_URL_LINKEDIN'),
],
'instagram' => [
'client_id' => env('INSTAGRAM_CLIENT_ID'),
'client_secret' => env('INSTAGRAM_CLIENT_SECRET'),
'redirect' => env('CALLBACK_URL_INSTAGRAM'),
],
【讨论】:
我的 config/services.php 中有这个。但它无法从 vendor/laravel/socialite/src/SocialiteManager.php 读取。我可以访问 services.php 中的所有其他数组,除了 facebook 凭据。我不知道为什么。 谢谢,我错过了实时服务器上 config/services.php 文件中的这些凭据,现在一切都很好【参考方案2】:这件事最近发生在我身上,在阅读 *** 上的以下帖子后修复它:
Why do I have to run "composer dump-autoload" command to make migration work in laravel
解决方法基本上是运行以下命令:
php artisan clear-compiled
composer dump-autoload
php artisan optimize
【讨论】:
这样做,相信我,它可以解决问题。谢谢【参考方案3】:你必须清除配置缓存文件,如何?如果您使用php artisan
,您将看到命令 config:clear。运行它:
php artisan config:clear
现在如果你访问 Laravel\Socialite\SocialiteManager::createFacebookDriver() 中的 $config 变量 您将获得存储在 config/services.facebook(例如 Facebook)中的配置元素,之前对社交名流来说是不“可见的”。
简而言之:运行php artisan config:clear
【讨论】:
“config”命名空间中没有定义命令。流明 流明有什么解决办法?【参考方案4】:试试这些
-
检查您是否在 config/services.php 中拥有所有社交媒体
在您的注册或登录页面上检查与 facebook 对应的 url
a href=" url('/login/facebook') "
转到路线并检查您是否正确配置了路线
Route::get('login/social', 'Auth\LoginController@redirectToProvider');
Route::get('login/social/callback', 'Auth\LoginController@handleProviderCallback');
打开 Auth/LoginController 看看有没有
use Socialite;
public function redirectToProvider($social)
Socialite::driver($social)->redirect();
public function handleProviderCallback($social)
$user = Socialite::driver($social)->user();
正如你所提到的,你只面临 facebook 的错误,我很确定它必须在前三个步骤中
【讨论】:
【参考方案5】:问题在于传递给函数 socialLogin($social) 的参数。 尝试在 Socialite 的 drvier 函数中手动设置 'github' 或 'facebook' 字符串。
不要忘记在 web.php 中的路由中提及 'github' 、 'facebook 等
【讨论】:
【参考方案6】:我有同样的问题。
我在阅读 Laravel 文档时因为复制/粘贴而出现此错误。在我的例子中 loginController.php 改变了这个:
// I copied this from Laravel doc
public function redirectToProvider()
return Socialite::driver('github')->redirect();
//What I really needed
public function redirectToProvider()
return Socialite::driver('google')->redirect();
【讨论】:
【参考方案7】:打开 vendor\laravel\socialite\src\SocialiteManager.php 替换为 受保护的函数 formatRedirectUrl(array $config) $redirect = value($config['redirect']);
return Str::startsWith($redirect, '/')
? $this->app['url']->to($redirect)
: $redirect;
【讨论】:
【参考方案8】:Open vendor\laravel\socialite\src\SocialiteManager.php and
Replace
protected function createFacebookDriver()
$config = $this->app['config']['services.facebook'];
return $this->buildProvider(
FacebookProvider::class, $config
);
To
protected function createFacebookDriver()
$config = $this->app['config']['services.stripe.facebook'];
return $this->buildProvider(
FacebookProvider::class, $config
);
【讨论】:
【参考方案9】:即使在设置了我的 config/services.php
文件并设法通过清除我的缓存来解决它之后,我也遇到了同样的问题。在你的项目目录中运行
php artisan optimize:clear
php artisan cache:clear
php artisan config:clear
php artisan config:cache
这可确保清除整个缓存。
注意:在 Laravel 中更改核心文件大多数时候需要您运行上述命令,因为 Laravel 倾向于在更大范围内使用缓存来提高应用程序速度
【讨论】:
以上是关于Laravel 5.5 socialite integration 显示错误 formatRedirectUrl() must be of the type array, null given的主要内容,如果未能解决你的问题,请参考以下文章
无法将 Laravel / Socialite 与 Lumen 一起使用
使用 Laravel Socialite 登录 Facebook
Laravel Socialite 与 Facebook 未登录