我正在尝试使用socialite将社交身份验证添加到Laravel 5.8 API项目中。
当尝试处理社交提供回调时,ArgumentCountError
会抛出在这里
函数App \ Http \ Controllers \ SocialAuthController :: handleProviderCallback()的参数太少,传递了0个且恰好期望1个
错误是指此代码块的第一行
public function handleProviderCallback($provider)
{
// retrieve social user info
$socialUser = Socialite::driver($provider)->stateless()->user();
// check if social user provider record is stored
$userSocialAccount = SocialAccount::where('provider_id', $socialUser->id)->where('provider_name', $provider)->first();
if ($userSocialAccount) {
// retrieve the user from users store
$user = User::find($userSocialAccount->user_id);
// assign access token to user
$token = $user->createToken('Pramopro')->accessToken;
// return access token & user data
return response()->json([
'token' => $token,
'user' => (new UserResource($user))
]);
} else {
// store the new user record
$user = User::create([
'name' => $socialUser->name,
'username' => $socialUser->email,
'email_verified_at' => now()
]);
...
// assign passport token to user
$token = $user->createToken('******')->accessToken;
// return response
return response()->json(['token' => $token]);
}
}
下面是我设置其他代码的方式。我添加的env
中的第一个拳头
GOOGLE_CLIENT_ID=******
GOOGLE_CLIENT_SECRET=*******
GOOGLE_CALLBACK_URL=https://staging.appdomain.com/api/v1/user
然后修改web.php
Auth::routes(['verify' => true]);
Route::get('/auth/{provider}', 'SocialAuthController@redirectToProvider');
Route::get('/auth/{provider}/callback', 'SocialAuthController@handleProviderCallback');
最后在google应用中,我添加了uri路径,在成功通过身份验证后,用户将被重定向到该路径
https://staging.appdomain.com/api/v1/user
我该如何解决?
答案 0 :(得分:0)
成功认证之后,应该重定向到用户的回调uri显然没有被缓存。因此,运行php artisan route:cache
可以解决此问题。