Laravel中未显示API验证错误
我试图向我的Laravel post端点发出post请求,但没有收到任何验证错误 控制器Laravel中未显示API验证错误,laravel,laravel-6,Laravel,Laravel 6,我试图向我的Laravel post端点发出post请求,但没有收到任何验证错误 控制器 类登录控制器扩展控制器 { 公共函数adminLogin(AdminLoginRequest$请求) { 如果(身份验证::尝试([ 'email'=>$request->get('email'),'password'=>$request->get('password'),'role'=>'admin' ])) { $user=Auth::user(); $success['token']=$user->c
类登录控制器扩展控制器
{
公共函数adminLogin(AdminLoginRequest$请求)
{
如果(身份验证::尝试([
'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);
}否则{
返回响应()->json(['error'=>'unauthorized'],401);
}
}
}
API路线
Route::post('/admin/jamisi/login','Api\admin\Auth\LoginController@adminLogin');
路由::中间件('auth:api')->get('/user',函数(Request$Request){
返回$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));
}
}
当我尝试与邮递员一起测试时,我得到一个“401未授权错误”。验证错误没有显示
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\JsonResponse;
并将其添加到你的顶级adminLogin功能中。无需检查唯一的电子邮件。因为在这里你只检查电子邮件而不注册
$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::trunt
返回false时的操作:
if (Auth::attempt(...) {
//...
} else {
throw \Illuminate\Validation\ValidationException::withMessages([
'email' => [trans('auth.failed')],
]);
}
这类似于框架的登录控制器如何处理失败的身份验证:您可能需要授权才能调用此端点?@ceejayoz No。这是一个登录请求,因此您不需要授权。对于每个不需要授权的公共请求,请设置函数
authorize()
在自定义表单请求中返回false。实际上,在运行验证过程之前,Laravel将首先调用该函数。@PatrickObafemi响应代码表明情况并非如此。您是否可能正在控制器的构造函数中分配auth中间件(如某些默认的Laravel)并且没有向adminLogin
方法中添加?不,我没有分配auth中间件,也没有向adminLogin方法中添加任何异常谢谢您的回复,但我仍然未经授权,我仍然希望使用请求类。