Поставщики социальных сетей Lumen 5.5 не работают с setConfig()

Я использую поставщиков социальных сетей Laravel (https://socialiteproviders.github.io/ ) для входа пользователя в Lumen 5.5 API. Метод setConfig() для принудительной настройки у меня не работает...

Здесь ниже моя ошибка и мой код. Проблема в том, что я не знаю, почему у меня эта ошибка.

Ошибка отображения:

Ошибка типа: аргумент 1, переданный в Laravel\Socialite\SocialiteManager::formatConfig(), должен иметь тип array, null заданный, вызванный в /home/vagrant/www/project1/api.website.app/vendor/laravel/socialite/ src/SocialiteManager.php в строке 125

Код PHP:

$clientId = env('TWITTER_KEY');
$clientSecret = env('TWITTER_SECRET');
$redirectUrl = env('TWITTER_REDIRECT_URI');
$additionalProviderConfig = [];
$config = new SocialiteConfig($clientId, $clientSecret, $redirectUrl, $additionalProviderConfig);

return Socialite::with('twitter')->stateless()->setConfig($config)->redirect();

person pirmax    schedule 02.11.2017    source источник
comment
Я вижу ошибку, но не вижу вопроса... Я предполагаю, что вам нужна помощь в выяснении, почему вы получаете ошибку?   -  person MadSkunk    schedule 02.11.2017
comment
Простите, действительно забыл вопрос... Редактирую вопрос сразу.   -  person pirmax    schedule 02.11.2017
comment
ты нашел решение?   -  person ßãlãjî    schedule 03.03.2021


Ответы (1)


Сначала необходимо настроить services конфигурацию! Создайте файл services.php в папке config (вы можете создать его, если у вас его еще нет).

Файл services.php

return [
    'twitter' => [
        'client_id' => env('TWITTER_KEY'),
        'client_secret' => env('TWITTER_SECRET'),
        'redirect' => env('TWITTER_REDIRECT_URI'),
    ]
];

Ваш код должен быть таким:

use Laravel\Socialite\Facades\Socialite;

// You may not this one, read below explanation
app()->configure('services');

return Socialite::with('twitter')->stateless()->redirect();

Лучше, если вы переместите строку configure в файл bootstrap/app.php:

// Just right before register SocialiteProvider
$app->configure('services');
$app->register(SocialiteProviders\Manager\ServiceProvider::class);

Если вы переместили этот configure, ваш код теперь должен быть:

use Laravel\Socialite\Facades\Socialite;

return Socialite::with('twitter')->stateless()->redirect();

PS:

Если у вас есть вызов неопределенного метода stateless, это означает, что вы еще не установили прослушиватель, вы можете прочитать здесь. Откройте свой App\Providers\EventServiceProvider, добавьте эту строку:

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'App\Events\SomeEvent' => [
            'App\Listeners\EventListener',
        ],

        'SocialiteProviders\Manager\SocialiteWasCalled' => [
            'SocialiteProviders\Twitter\TwitterExtendSocialite@handle',
        ]
    ];
}

И не забудьте добавить эту строку в ваш файл bootstrap/app.php:

$app->register(App\Providers\EventServiceProvider::class);
person flipbox    schedule 03.11.2017
comment
Извините, это не работает. Просмотрите эту проблему с ответом: stackoverflow.com/a/47132907/8874916 - person pirmax; 06.11.2017
comment
Вы смотрите на мой ответ? - person pirmax; 08.11.2017