完整解决方案:
你好,reinierkors,
我也曾尝试使用5.3版本实现同样的功能,最终我成功了,并且解决方案非常干净。
首先,我在App\Http\Controllers\Api下创建了一个名为Auth的新文件夹,这样我就可以为API添加新的身份验证控制器,以便重写一些函数,然后将身份验证控制器(LoginController,ForgotPasswordController,RegisterController)复制到这个新文件夹中。
在LoginController类中:
我重写了使重定向的函数。
第一个函数:当身份验证返回成功时会自动调用。
第二个函数:当身份验证返回错误时会自动调用。
最后一个函数:当用户在尝试5次登录后被锁定时,会自动调用。
protected function sendLoginResponse(Request $request) {
$this->clearLoginAttempts($request);
return response()->json(['SUCCESS' => 'AUTHENTICATED'], 200);
}
protected function sendFailedLoginResponse() {
return response()->json(['ERROR' => 'AUTH_FAILED'], 401);
}
protected function sendLockoutResponse(Request $request) {
$seconds = $this->limiter()->availableIn(
$this->throttleKey($request)
);
return response()->json(['ERROR' => 'TOO_MANY_ATTEMPTS', 'WAIT' => $seconds], 401);
}
在 RegisterController 类中,我重写了那些造成重定向的函数。
在第一个函数中,我修改了验证器响应以返回更加便于处理的响应(数组)。
第二个函数将在注册成功后自动调用。
public function register(Request $request) {
$validator = $this->validator($request->all());
if($validator->fails())
return response()->json(['ERROR' => $validator->errors()->getMessages()], 422);
event(new Registered($user = $this->create($request->all())));
$this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
protected function registered(Request $request, $user) {
return response()->json(['SUCCESS' => 'AUTHENTICATED']);
}
在 ForgotPasswordController 类中:
我重写了处理重定向的函数。
我修改了重置链接电子邮件函数,这样我们就可以获取消息并以 JSON 格式显示,而不是重定向。
public function sendResetLinkEmail(Request $request)
{
$validator = Validator::make($request->only('email'), [
'email' => 'required|email',
]);
if ($validator->fails())
return response()->json(['ERROR' => 'VALID_EMAIL_REQUIRED'], 422);
$response = $this->broker()->sendResetLink(
$request->only('email')
);
if ($response === Password::RESET_LINK_SENT) {
return response()->json(['SUCCESS' => 'EMAIL_SENT'], 200);
}
return response()->json(['ERROR' => 'EMAIL_NOT_FOUND'], 401);
}
dd()
并检查您是否可以在请求中看到该dd
。如果可以,很可能您在该代码中有一个重定向,应该使用Response
解决。如果没有,则很可能问题在于路由的中间件。 - Luís Cruz