1

我使用Laravel Socialite Providers ( https://socialiteproviders.github.io/ ) 在 Lumen 5.5 API 上登录用户。 setConfig()方法,强制配置,对我不起作用......

下面是我的错误和我的代码。问题是我不知道为什么我有这个错误。

显示错误:

类型错误:传递给 Laravel\Socialite\SocialiteManager::formatConfig() 的参数 1 必须是数组类型,给定 null,在 /home/vagrant/www/project1/api.website.app/vendor/laravel/socialite/ 中调用第 125 行的 src/SocialiteManager.php

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

1 回答 1

0

您需要先配置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);

如果您已移动 this 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);
于 2017-11-03T05:17:30.910 回答