Auth :: попытки () выдавая ошибку, говоря "вызов неопределенного метода Illuminate \ Auth \ TokenGuard :: try ()" в Laravel 6.4 - PullRequest
2 голосов
/ 30 октября 2019

В последнее время я делаю выстрел в последний Laravel (6.4). Пытался реализовать функцию простого входа на основе API. Не использовал ни одного пакета, такого как Passport или Tymon's JWT. Я использовал очень простую аутентификацию (просто оставил столбец в таблице пользователей с именем api_token). Но при ошибке появляется сообщение

Symfony \ Component \ Debug \ Exception \ FatalThrowableError: вызов неопределенного метода Illuminate \ Auth \ TokenGuard :: попытки ()

Вот мойконтроллер

//only method in the controller, so used `__invoke` method.
    public function __invoke(Request $request)
    {
         $request->validate([
              'email'    => 'required',
              'password' => 'required',
         ]);

         $credentials = $request->only(['email', 'password']);
         $credentials['active'] = 1;

         if (Auth::guard('api')->attempt($credentials)) {
              return response()->json([
                  'data' => 'Wrong credential given'
              ]);
         }

         return response()->json([
             'data' => \auth()->user()
         ]);
    }

А это мой config/auth.php статус файла. Я использую API-защиту для моего доступа. Но токен должен прийти после входа в систему. Здесь я не могу войти.

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

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

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

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

API Guard не имеет ни метода attempt, ни какой-либо другой формы входа пользователя. Все, что он делает, это защищает маршруты. Для аутентификации пользователей вы все равно должны использовать защиту по умолчанию.

1 голос
/ 31 октября 2019

Проблема решается, когда я устанавливаю защиту по умолчанию на 'web' (как это было раньше). Как отметил Алек в своем ответе, The API Guard does not have an attempt method. Я думал, что api должен быть там для вызова API. Но это необходимо, когда вы хотите авторизовать пользователя. Но до этого вы можете обрабатывать логин и регистрацию по умолчанию web guard.

Итак, вот мои последние изменения. Контроллер:

   $request->validate([
        'email'    => 'required',
        'password' => 'required',
    ]);

    $credentials = $request->only(['email', 'password']);
    $credentials['active'] = 1;

    if (Auth::attempt($credentials)) {
        return response()->json([
            'data' => auth()->user()
        ]);
    }

    return response()->json([
        'data' => 'Wrong credential given'
    ]);

А вот мой файл config / auth.php

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

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

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...