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 未登录

Laravel 7 Socialite Google 登录显示无效的授权错误

Laravel 5.2 Socialite 检索空电子邮件

用户取消应用请求后,Laravel 5 Socialite Facebook 登录错误处理回调