【问题标题】:Laravel 5.5 socialite integration shows error formatRedirectUrl() must be of the type array, null givenLaravel 5.5 socialite integration 显示错误 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();
}

【问题讨论】:

    标签: laravel-5 laravel-socialite


    【解决方案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】:

    这件事最近发生在我身上,在阅读 StackOverflow 上的以下帖子后修复它:

    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】:

    试试这些

    1. 检查您是否在 config/services.php 中拥有所有社交媒体
    2. 在您的注册或登录页面上检查与 facebook 对应的 url

      a href="{{ url('/login/facebook') }}"

    3. 转到路线并检查您是否正确配置了路线

      Route::get('login/{social}', 'Auth\LoginController@redirectToProvider'); Route::get('login/{social}/callback', 'Auth\LoginController@handleProviderCallback');

    4. 打开 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 倾向于在更大范围内使用缓存来提高应用程序速度

              【讨论】:

                猜你喜欢
                • 2021-05-05
                • 1970-01-01
                • 2022-11-20
                • 2023-02-25
                • 1970-01-01
                • 2021-11-23
                • 1970-01-01
                • 2019-01-05
                • 2022-12-17
                相关资源
                最近更新 更多