API 未显示验证错误 Laravel

API validation errors not showing In Laravel

我正在尝试向我的 Laravel post 端点发出 post 请求,但我没有收到任何验证错误。

控制器

class LoginController extends Controller
{
    public function adminLogin(AdminLoginRequest $request)
    {
        if (Auth::attempt([
            'email' => $request->get('email'), 'password' => $request->get('password'), 'role' => 'admin'
        ])) {
            $user = Auth::user();
            $success['token'] = $user->createToken('AppName')->accessToken;
            return response()->json(['success' => $success], 200);
        } else {
            return response()->json(['error' => 'Unauthorised'], 401);
        }
    }
}

API路线

Route::post('/admin/jamisi/login', 'Api\Admin\Auth\LoginController@adminLogin');

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

AdminLoginRequest

class AdminLoginRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'email' => 'required|email|unique:users',
            'password' => 'required'
        ];
    }

    public function messages()
    {
        return [
            'email.required' => 'The Email Field Is required.',
            'email.unique' => 'The Email Has Already Been Taken.',
            'password.required' => 'The Password Field Is Required',
        ];
    }

    protected function failedValidation(Validator $validator)
    {
        throw new HttpResponseException(response()->json($validator->errors(), 422));
    }
}

当我尝试使用 Postman 进行测试时,我收到“401 未经授权的错误”。未显示验证错误。

use Illuminate\Support\Facades\Validator;
use Illuminate\Http\JsonResponse; 

并将其添加到您的顶级 adminLogin 函数中。无需检查唯一性 email.because 这里您只检查电子邮件而不是注册

$validator = Validator::make($request->all(), [
            'email' => 'required',
            'password' => 'required',

        ]);
        if ($validator->fails()) {

        $message = $validator->errors()->first();
        $errors=$validator->errors();
        $code='200';

        $response = array(
            'success' => false,
            'message' => $message,
            "errors" => $errors
        );

        return new JsonResponse($response, $code);

        }




如果您想要 验证 错误密码错误(而不是 HTTP 401 未授权响应),那么您需要更改控制器方法在 Auth::attempt 时执行的操作returns假:

if (Auth::attempt(...) {
        //...
} else {
    throw \Illuminate\Validation\ValidationException::withMessages([
        'email' => [trans('auth.failed')],
    ]);
}

这类似于框架的登录控制器处理失败身份验证的方式:https://github.com/laravel/framework/blob/e04a7ffba8b80b934506783a7d0a161dd52eb2ef/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php#L133

发送 application/vnd.api+json 作为接受 header.