【发布时间】:2019-08-03 14:28:47
【问题描述】:
我正在尝试使用社交名将社交身份验证添加到 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
我该如何解决这个问题?
【问题讨论】:
-
报错时的url地址是哪个?
-
@mdexp 网址是
https://staging.appdomain.com/api/v1/user?state=..... -
你那里缺少参数,你需要在触发函数时发送 $provider 参数