Laravel JWT Auth не работает должным образом, значение $token равно false / true

#php #laravel #laravel-5.7

#php #laravel #laravel-5.7

Вопрос:

Я использую Laravel 5.7 и «tymon / jwt-auth»: «1.0.0-rc.3» для аутентификации. После того, как я зарегистрировал пользователя, когда я пытаюсь аутентифицировать его, я всегда получаю значение bool: true или false, а не токен. Я перепробовал все «исправления», которые нашел в Интернете, и ничего не работает. Чего мне не хватает?

Это метод register:

 protected function create(array $data)
{

    if ($data['legitimation_id'][0] === 'E') {
        $user_type = 1;
    }
    else if ($data['legitimation_id'][0] === 'P') {
        $user_type = 2;
    }

    $data['user_type'] = $user_type;
    $data['password'] = Hash::make($data['password']);

    $user = User::create($data);
    LegitimationController::delete($data['legitimation_id']);

    return $user;
}

public function register(Request $request) {

    $data = $request->all();

    if ($this->validator($data)->fails()) {
        return $this->sendError('Validation Error.', $this->validator($data)->errors());
    }

    if (mb_substr($data['legitimation_id'], 0, 1) != 'P' amp;amp; mb_substr($data['legitimation_id'], 0, 1) != 'E' ) {
        return $this->sendError('Validation Error.', array("legitimation_id" => 'Fail'));
    };

    $user = $this->create($data);

    $success = ['first_name' => $user['first_name'], 'last_name' => $user['last_name']];

    return $this->sendResponse($success, 'Succes');
}
  

Это метод входа в систему:

 public function login(Request $request)
{
    $credentials = $request->only('email', 'password');

    $jwt_token = null;

    if (!$jwt_token = auth('api')->attempt($credentials)) {
        $this->sendError("Unauthorized", ['error' => 'Invalid Email or Password'], 401);
    }

    $this->sendResponse(['token' => $jwt_token], "Succes");
}
  

api.php

 Route::group([

'middleware' => 'cors',
'prefix' => 'v1'

], function () {
    Route::post('register', 'AuthRegisterController@register');
    Route::post('login', 'AuthLoginController@login');
});
  

auth.php

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

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

Комментарии:

1. Как вы тестируете свой API? Почтальон, бессонница? Можете ли вы добавить ответ api с отображаемыми заголовками, запросом, URL-адресом?

2. Есть ли какие-либо ошибки в laravel.log ?

3. Проблема заключалась в том, что не возвращалось значение $this-> sendResponse([‘token’ => $ jw_token], «Succes»); Я исправил это. Спасибо.

4. Как вы это исправили @Robet

Ответ №1:

Если до этого вы использовали другую систему аутентификации, а не laravel jwt, рекомендуется выполнить команды очистки кэша в laravel после внесения изменений в конфигурационные файлы в laravel, например config/auth.php

конфигурация php artisan: очистить

или

конфигурация php artisan: кэш