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.
我正在尝试向我的 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.