方法 Laravel\Passport\Guards\TokenGuard::attempt 不存在

Muh*_*ais 6 php laravel laravel-passport laravel-9

在 Laravel 9 中,我尝试使用自定义防护来访问登录 API client,但出现以下错误。请帮忙。

BadMethodCallException: Method Laravel\Passport\Guards\TokenGuard::attempt does not exist.
Run Code Online (Sandbox Code Playgroud)

配置/Auth.php

    'guards' => [
        ...
        'client' => [
            'driver' => 'passport',
            'provider' => 'client',
        ],
    ],

    'providers' => [
        ...
        'client' => [
            'driver' => 'eloquent',
            'model' => App\Models\Client::class,
        ],
    ],
Run Code Online (Sandbox Code Playgroud)

错误行: if(!$authGuard->attempt($login)){

api/AuthController.php

public function login(Request $request){
        $login = $request->validate([
            'email' => 'required|string',
            'password' => 'required|string',
        ]);
        try {
            $authGuard = Auth::guard('client');
            if(!$authGuard->attempt($login)){
                $data = 'Invalid Login Credentials';
                $code = 401;
            } else {
                $user = $authGuard->user();
                $token = $user->createToken('user')->accessToken;
                $code = 200;
                $data = [
                    'user' => $user,
                    'token' => $token,
                ];
            }
        } catch (Exception $e) {
            $data = ['error' => $e->getMessage()];
        }
        return response()->json($data, $code);
    }
Run Code Online (Sandbox Code Playgroud)

模型/Client.php

use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Passport\HasApiTokens;
class Client extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
Run Code Online (Sandbox Code Playgroud)

截屏: 在此输入图像描述

小智 2

我认为Auth::attempt()与护照不兼容。

所以,你可以使用Auth::check()方法来代替。