我正在使用“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();
}
答案 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)
试试这些
在您的注册或登录页面上,查看与facebook对应的网址
a href="{{ url('/login/facebook') }}"
转到路线,检查路线是否配置正确
Route::get('login/{social}', 'Auth\LoginController@redirectToProvider');
Route::get('login/{social}/callback', 'Auth\LoginController@handleProviderCallback');
打开Auth / LoginController并检查是否有
use Socialite;
public function redirectToProvider($social)
{
Socialite::driver($social)->redirect();
}
public function handleProviderCallback($social)
{
$user = Socialite::driver($social)->user();
}
正如你所提到的,你只是面对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
);
}