Jezz2018
Jezz2018

Reputation: 1

Laravel 9 auth using JSON data

I'm new to Laravel and use Laravel 9 for my REST API. The client sends data in JSON format when I want to authenticate the application. But I cannot authenticate JSON format with my below code. Can anyone help me to find out the problem?

public function loginUser(Request $request)
{
    $validateUser = Validator::make($request->all(), [
        'email' => 'required|email',
        'password' => 'required'
    ]);

    if ($validateUser->fails()) {
        return response()->json([
            'status' => false,
            'message' => 'Validation errror',
            'errors' => $validateUser->errors()
        ], 401);
    }
}

Upvotes: 0

Views: 404

Answers (2)

Snake MAGIC
Snake MAGIC

Reputation: 54

if u using postman you go to headers and wright

Key : Accept Value : application/json

Upvotes: 0

Wellington Barbosa
Wellington Barbosa

Reputation: 11

Note that your code needs some improvements.

Instead of doing manual validation, this way is better:

app/Exceptions/Handler.php

public function render($request, Throwable $e)
{
    if ($e instanceof \Illuminate\Validation\ValidationException) {
        return response()->json([
            'status' => false,
            'message' => 'Validation Error',
            'errors' => $e->errors()
        ], 422);
    }

    parent::render($request, $e);
}

Now, in your controller, just:

$validatedData = $request->validate([
            'email' => ['required', 'email'],
            'password' => ['required', (new \Illuminate\Validation\Rules\Password(8))]
]);

And, to solve the JSON Problem, create a new middleware with: php artisan make:middleware ForceXmlHttpRequest

app/Http/Middleware/ForceXmlHttpRequest
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class ForceXmlHttpRequest
{
    public function handle(Request $request, Closure $next)
    {
        $request->headers->set('X-Requested-With', 'XMLHttpRequest');

        return $next($request);
     }
}

app/Http/Middleware/Kernel.php
protected $middlewareGroups = [
...
'api' => [
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \App\Http\Middleware\ForceXmlHttpRequest::class,
    ],
];

Upvotes: 1

Related Questions