【问题标题】:ArgumentCountError in Laravel 5.8Laravel 5.8 中的 ArgumentCountError
【发布时间】: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 参数

标签: php laravel


【解决方案1】:

在成功认证后用户应该被重定向到的回调 uri 显然没有被缓存。所以运行php artisan route:cache 修复了它。

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 2021-03-18
    • 2019-07-28
    • 1970-01-01
    • 2019-12-03
    • 2020-03-12
    • 2020-03-08
    • 2020-05-31
    • 2020-01-31
    相关资源
    最近更新 更多