Lumen 5.5 Socialite Providers 不适用于 setConfig()
Lumen 5.5 Socialite Providers doesn't works with setConfig()
我使用 Laravel Socialite Providers (https://socialiteproviders.github.io/) 在 Lumen 5.5 API 上登录用户。
setConfig() 方法,强制配置,对我不起作用...
下面是我的错误和我的代码。问题是我不知道为什么会出现这个错误。
显示错误:
Type error: Argument 1 passed to
Laravel\Socialite\SocialiteManager::formatConfig() must be of the type
array, null given, called in
/home/vagrant/www/project1/api.website.app/vendor/laravel/socialite/src/SocialiteManager.php
on line 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();
您需要先配置services
配置!在 config
文件夹中创建一个 services.php
文件(如果您还没有,可以创建一个)。
文件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
方法,说明你还没有设置监听器,可以阅读here。打开你的 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);
我使用 Laravel Socialite Providers (https://socialiteproviders.github.io/) 在 Lumen 5.5 API 上登录用户。 setConfig() 方法,强制配置,对我不起作用...
下面是我的错误和我的代码。问题是我不知道为什么会出现这个错误。
显示错误:
Type error: Argument 1 passed to Laravel\Socialite\SocialiteManager::formatConfig() must be of the type array, null given, called in /home/vagrant/www/project1/api.website.app/vendor/laravel/socialite/src/SocialiteManager.php on line 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();
您需要先配置services
配置!在 config
文件夹中创建一个 services.php
文件(如果您还没有,可以创建一个)。
文件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
方法,说明你还没有设置监听器,可以阅读here。打开你的 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);