Laravel JWT Auth Middleware (пользовательская таблица пользователей) всегда возвращает 401 - PullRequest
0 голосов
/ 22 декабря 2018

Я успешно вошел в систему через приложение laravel, используя пользовательскую модель и поля.

Но проблема в том, как выполнить выход из системы и выполнить другие операции.Вот список маршрутов

+--------+----------+--------------+------+----------------------------------------------+-----------------+
| Domain | Method   | URI          | Name | Action                                       | Middleware      |
+--------+----------+--------------+------+----------------------------------------------+-----------------+
|        | GET|HEAD | /            |      | Closure                                      | web             |
|        | POST     | api/login    |      | App\Http\Controllers\AuthController@login    | api             |
|        | GET|HEAD | api/logout   |      | App\Http\Controllers\AuthController@logout   | api,jwt.auth    |
|        | POST     | api/me       |      | App\Http\Controllers\AuthController@me       | api,jwt.auth    |
|        | POST     | api/refresh  |      | App\Http\Controllers\AuthController@refresh  | api,jwt.refresh |
|        | POST     | api/register |      | App\Http\Controllers\AuthController@register | api             |
|        | GET|HEAD | login        |      | Closure                                      | web             |
+--------+----------+--------------+------+----------------------------------------------+-----------------+

и вот как организовать весь маршрут

Route::post('register', 'AuthController@register');
Route::post('login', 'AuthController@login');

Route::middleware('jwt.auth')->group(function () {
    Route::get('logout', 'AuthController@logout');
    Route::post('me', 'AuthController@me');
});

Route::middleware('jwt.refresh')->group(function () {
    Route::post('refresh', 'AuthController@refresh');
});

проблема с jwt.auth и jwt.refresh.Оба вернут типичный 401. Я имею в виду ответ 401 laravel.

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

/**
 * Validate a user against the given credentials.
 *
 * @param \Illuminate\Contracts\Auth\Authenticatable $user
 * @param array                                      $credentials
 *
 * @return bool
 */
public function validateCredentials(UserContract $user, array $credentials)
{
    $plain = $credentials['password']; // will depend on the name of the input on the login form
    $hashedValue = $user->getAuthPassword();

    if ($this->hasher->needsRehash($hashedValue) && $hashedValue === md5($plain)) {
        $user->us_password = bcrypt($plain);
        $user->save();
    }

    return $this->hasher->check($plain, $user->getAuthPassword());
}

, и внес некоторые изменения в AuthServiceProvider

class AuthServiceProvider extends ServiceProvider
{
    ...

    /**
     * Register any authentication / authorization services.
     */
    public function boot()
    {
        $this->registerPolicies();

        $this->app['auth']->provider('custom', function ($app, array $config) {
            $model = $app['config']['auth.providers.users.model'];

            return new CustomUserProvider($app['hash'], $model);
        });
    }
}

Я начинаю подозревать, что этот пакет не совместимдо Laravel 5.7.Потому что я использую самую предложенную версию ("tymon/jwt-auth": "dev-develop")

...