Не удается получить ответ JSON от почтальона с использованием API Laravel - PullRequest
1 голос
/ 28 мая 2020

Я получаю эту ошибку, когда пытаюсь войти в систему с неправильными учетными данными:

<!doctype html>
<html class="theme-light">
<!--
TypeError: Argument 2 passed to Symfony\Component\HttpFoundation\JsonResponse::__construct() must be of the type integer, array given, called in /home/stylmyvz/cars.styleshopeg.com/vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php on line 31 in file /home/stylmyvz/cars.styleshopeg.com/vendor/symfony/http-foundation/JsonResponse.php on line 42

#0 /home/stylmyvz/cars.styleshopeg.com/vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php(31): Symfony\Component\HttpFoundation\JsonResponse->__construct(Array, Array, Array)
#1 /home/stylmyvz/cars.styleshopeg.com/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php(99): Illuminate\Http\JsonResponse->__construct(Array, Array, Array, 0)
#2 /home/stylmyvz/cars.styleshopeg.com/app/Http/Controllers/APILoginController.php(31): Illuminate\Routing\ResponseFactory->json(Array, Array)
#3 [internal function]: App\Http\Controllers\APILoginController->login(Object(Illuminate\Http\Request)
I want to receive JSON response like this in Postman : 
{
  "error":"invalid username or password"
}

Вот контроллер входа, и я поручаю ему дать мне «неверное имя пользователя или пароль»

Может ли кто-нибудь подскажите что с ним не так

class APILoginController extends Controller
{
    //
    public function login(Request $request){
        $validator = Validator::make($request -> all(),[
            'email' => 'required|string|email|max:255',
            'password' =>'required'
        ]);

        if($validator->fails()){
            return response()->json($validator->errors());
        }

        $credentials = $request->only('email', 'password');
        try {
            if(! $token = JWTAuth::attempt($credentials))
            {
                return response()->json(['error'=>'invalid username or password'], [401]);
            }
        } catch (JWTException $e) {
            //throw $th;
            return response()->json(['error'=>'could not create token'], [500]);
        }

        return response()->json(compact('token'));

    }
}

Содержимое api. php файл:

Route::post('user/register','APIRegisterController@register');

Route::post('user/login','APILoginController@login');

Route::middleware('jwt.auth')->get('/users', function (Request $request) {
    return auth()->user();
});

Route::middleware('jwt.auth')->group( function(){
   Route::resource('/cars', 'API\CarController');
} );

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Пожалуйста, измените эту попытку и поймайте оба ..

try {
            if(! $token = JWTAuth::attempt($credentials))
            {
                return response()->json(['error'=>'invalid username or password'], 401);
            }
        } catch (JWTException $e) {
            //throw $th;
            return response()->json(['error'=>'could not create token'], 500);
        }

Вот как я это делаю в Laravel ....

return Response::json(['message' => $value,'other_info'=>$vlue2],201);

Или с помощью вспомогательной функции:

return response()->json(['message' => $value,'other_info'=>$vlue2], 201); 
1 голос
/ 29 мая 2020

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

return response()->json(['error'=>'invalid username or password'], [401]);

, и мне нужно удалить скобки и передать его как int

return response()->json(['error'=>'invalid username or password'], 401);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...