laravel 8 — auth()->factory() { то же обновление() и попытка() } не найдено в JWT AuthController

#php #laravel #authentication #jwt

Вопрос:

я использую JWT для аутентификации API в laravel 8.

когда я использую auth()-> в своем контроллере , например , factory() или attemp() или что-то еще, laravel этого не знает и говорит :

Undefined method 'attempt'.intelephense(1013)

я не знаю, что я забыл включить

мой автоконтроллер :

 namespace AppHttpControllersApiAdmin;

use AppModelsUser;
use IlluminateHttpRequest;
use AppHttpControllersController;
use IlluminateSupportFacadesValidator;

class AuthController extends Controller
{
    
    public function __construct() {
        $this->middleware('auth:api', ['except' => ['login', 'register']]);
    }

    
    public function login(Request $request){
        $validator = Validator::make($request->all(), [
            'email' => 'required|email',
            'password' => 'required|string|min:6',
        ]);

        if ($validator->fails()) {
            return response()->json($validator->errors(), 422);
        }

        if (! $token = auth()->attempt($validator->validated())) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        return $this->createNewToken($token);
    }
.
.
.
.
.
 

и мой config/auth.php файл :

 return [

    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],


    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
            'hash' => false,
        ],
    ],


    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => AppModelsUser::class,
        ],
        // Following array is newly added to config
        'otp-user' => [
            'driver' => 'otp-based-auth-provider'
        ],


    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],


    'password_timeout' => 10800,

];


 

Ответ №1:

У Intelephense есть некоторые проблемы с некоторыми методами в Laravel. Вы можете либо игнорировать его, как это должно работать, либо вы можете назвать его:

 JWTAuth::attempt($validator->validated) 
 

Это должно устранить ошибку.