Laravel 5.5社交网站集成显示错误formatRedirectUrl()必须是类型数组,null给定

时间:2017-11-18 11:30:36

标签: laravel-5 laravel-socialite

我正在使用“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();
}

9 个答案:

答案 0 :(得分:8)

嗨,你错过了提供社交媒体的凭据,将其放在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'),
    ],

答案 1 :(得分:7)

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

php artisan config:clear

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

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

答案 2 :(得分:1)

最近发生在我身上,在阅读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 :(得分:1)

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

别忘了在web.php的路线中提及'github','facebook等等

答案 4 :(得分:1)

我有同样的问题。

在阅读Laravel文档时,由于复制/粘贴而导致此错误。在我的情况下,loginController.php更改了此内容:

run_script()    # reusable functionality
{
    python3 startmeVtest.py $@
    timeout 86400 ./start.sh
    sleep 4
}

# read the last timestamp first
d1="$(date -d "$(cat starttime.txt | sed -nE '$ s/(.*) [0-9]+$/\1/p')" +%s)"
# then save the current timestamp
echo "$(date) $(ls -1 | wc -l)" >> starttime.txt

# check difference with current time
if [[ "$(( $(date +%s) - d1 ))" -gt 21600 ]]; then
    # action if diff is more than 6 hours
    run_script 50 9 70
else
    # action if diff is less than 6 hours
    run_script 5 2 10
    run_script 10 4 20
    run_script 20 4 40
    run_script 30 8 50
fi

# run following always, irrespective of the time diff
./start.sh

答案 5 :(得分:1)

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

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

这可确保清除您的整个缓存。

注意:在Laravel中大多数时候更改核心文件都需要您运行上述命令,因为Laravel倾向于更大程度地使用缓存来提高应用程序速度

答案 6 :(得分:0)

试试这些

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

    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(); }

  5. 正如你所提到的,你只是面对facebook的错误,我很确定它必须在前三个步骤

答案 7 :(得分:0)

打开供应商\ laravel \ socialite \ src \ SocialiteManager.php 替换为 受保护的函数formatRedirectUrl(array $ config)     {         $ redirect = value($ config ['redirect']);

    return Str::startsWith($redirect, '/')
                ? $this->app['url']->to($redirect)
                : $redirect;
}

答案 8 :(得分:0)

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
        );
    }