Laravel Passport Auth :: попытка false, password_verify true

#php #laravel #authentication #laravel-passport

#php #laravel #аутентификация #laravel-passport

Вопрос:

Я использую passport для регистрации и входа пользователя с помощью api an guard, но, хотя процесс регистрации работает нормально, я не могу войти в систему, используя свой код. Я протестировал его на другой виртуальной машине, где он работает нормально.

Возвращаемый JSON является

 {
    "message": "Unauthorized",
    "request": {
        "username": "lloyd.thomas.admin",
        "password": "mypassowrd"
    }
}
  

Я использовал собственный password_verify для тестирования passowrd, и он показывает, что он действителен.
Authcontroller.php

 public function login(Request $request) {
    $request->validate([
        'username' => 'required|string',
        'password' => 'required|string',
        'remember_me' => 'boolean'
    ]);

    $credentials = request(['username', 'password']);

    if (!Auth::attempt($credentials)){
        return response()->json([
                    'message' => 'Unauthorized',
                    'request' => request(['username', 'password']),
                        ], 401);
    }

    $user = $request->user();

    $tokenResult = $user->createToken('Personal Access Token');
    $token = $tokenResult->token;

    if ($request->remember_me){
        $token->expires_at = Carbon::now()->addWeeks(1);
    }

    $token->save();
    return response()->json([
                'access_token' => $tokenResult->accessToken,
                'token_type' => 'Bearer',
                'expires_at' => Carbon::parse(
                        $tokenResult->token->expires_at
                )->toDateTimeString()
    ]);
}
  

В приложении / Моделях / пользователе

 public function setPasswordAttribute($password) {
        $this->attributes['password'] = bcrypt($password);
    }
  

В маршрутах api.php

 Route::group([
    'prefix' => 'auth'
], function () {
    Route::post('login', 'ApiControllersAuthController@login');
    Route::post('signup', 'ApiControllersAuthController@signup');

    Route::group([
      'middleware' => 'auth:api'
    ], function() {
        Route::get('logout', 'ApiControllersAuthController@logout');
        Route::get('user', 'ApiControllersAuthController@user');
    });
});
  

Имя пользователя и пароль проходят проверку подлинности при использовании web guard, но не api

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

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

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

1. какую версию laravel вы используете?

2. Вы сказали, что ошибка входа в систему произошла в начале вопроса. Но вы тогда говорите, что он проходит аутентификацию при использовании web guard? В чем именно ваша проблема?

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

4. @derek-pollard 5.7.22 Рабочая виртуальная машина 5.7.27