#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