Laravel 5.5 社交名媛集成显示错误格式RedirectUrl() 必须是数组类型,给定 null



我正在使用"laravel/socialite":"^3.0",登录Facebook。但它表明一个错误

类型错误:传递给 Laravel\Socialite\SocialiteManager::formatRedirectUrl(( 的类型必须是数组类型,给定 null,在/var/www/html/mas/vendor/laravel/socialite/src/SocialiteManager.php 中调用。

当我在登录控制器中调用以下函数时,就会发生这种情况

public function socialLogin($social)
{
    return Socialite::driver($social)->redirect();
}

嗨,您缺少将其放入配置/服务中的社交媒体凭据.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'),
    ],

你必须清除配置缓存文件,如何?如果你使用php artisan你会看到命令config:clear。运行它:

php artisan config:clear

现在,如果您访问 Laravel\Socialite\SocialiteManager::createFacebookDriver(( 中的 $config 变量您将获得存储在config/services.facebook(例如Facebook(中的配置元素,该元素以前对Socialite不"可见"。

简而言之:运行php artisan config:clear

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

为什么我必须运行"作曲家转储-自动加载"命令才能在 laravel 中进行迁移

解决方案基本上是运行以下命令:

php artisan clear-compiled composer dump-autoload php artisan optimize

问题在于传递给函数 socialLogin($social( 的参数。尝试在Socialite的drvier函数中手动设置"github"或"facebook"字符串。

不要忘记在网络中的路线中提及"github","facebook等.php

我有同样的问题。

我得到这个错误是因为在阅读 Laravel 文档时复制/粘贴。在我的情况下,在登录控制器中.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();
}
即使在

设置了我的config/services.php文件并通过清除缓存设法解决它之后,我也遇到了同样的问题。在项目目录中运行

php artisan optimize:clear
php artisan cache:clear
php artisan config:clear
php artisan config:cache

这可确保清除整个缓存。

注意:大多数情况下,在Laravel中更改核心文件需要您运行上述命令,因为Laravel倾向于在更大范围内使用缓存以提高应用程序速度

试试这些

  1. 检查您是否在配置/服务中拥有所有社交媒体.php
  2. 在您的注册或登录页面上,检查与脸书对应的网址

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

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

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

  4. 打开身份验证/登录控制器并检查是否有

    use Socialite; public function redirectToProvider($social) { Socialite::driver($social)->redirect(); } public function handleProviderCallback($social) { $user = Socialite::driver($social)->user(); }

正如你提到的,你只面临Facebook的错误,我很确定它必须在前三个步骤中。

Open vendor\laravel\socialite\src\SocialiteManager.php替换为受保护的函数格式重定向URL(数组$config( { $redirect = 值($config['重定向'](;

    return Str::startsWith($redirect, '/')
                ? $this->app['url']->to($redirect)
                : $redirect;
}
Open vendorlaravelsocialitesrcSocialiteManager.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
        );
    }

最新更新