我已经设置了一个 Ionic 应用程序来使用 Laravel 5.1 作为 API。当我尝试使用 Laravel 的样板 AuthController 登录、注册或通过电子邮件发送重置密码链接时,会收到通过 AngularJS ngResource 发送到相关 RESTful 端点的请求,但它总是在返回 200 之前执行 302 URL 重定向以加载视图来自不同发起者的响应,其中包含与未找到视图相关的错误,我可以在 Chrome 的网络选项卡中看到该错误(请参阅下面的输出)。我希望不会找到该视图,因为我使用 Laravel 作为 API,并且除了电子邮件模板之外没有其他视图。我想要做的是删除重定向。
例如,一个忘记密码的电子邮件请求会发出(并且使用电子邮件模板接收带有重置链接的电子邮件),而不是对该请求的 JSON 响应,而是发生 URL 重定向(代码 302),然后是响应 200未找到视图的错误:
** 错误响应 **
Sorry, the page you are looking for could not be found.
NotFoundHttpException in RouteCollection.php).
Chrome 控制台 - 网络选项卡
Name Status Type Initiator Size Time
forgot 302 text/html ionic.bundle.js:18526 614 B 2.38 s
localhost 200 xhr http://project.dev/api/password/forgot 2.3 KB 2.00 ms
我期望的是:
Name Status Type Initiator Size Time
forgot 200 text/html ionic.bundle.js:18526 614 B 2.38 s
如果我使用不使用 AuthController 操作的路由,而只是返回如下 JSON 响应,则会发生这种情况:
Route::post('email', function () {
return response()->json([ 'message' => 'Send an email!' ], 200);
});
Laravel 路线
+--------+----------+------------------------------+----------------------+-------------------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------------+----------------------+-------------------------------------------------------------+------------+
| | GET|HEAD | test | | Closure | |
| | POST | api/auth/login | | Project\Http\Controllers\Auth\AuthController@postLogin | guest |
| | GET|HEAD | api/auth/logout | | Project\Http\Controllers\Auth\AuthController@getLogout | |
| | POST | api/auth/register | | Project\Http\Controllers\Auth\AuthController@postRegister | guest |
| | POST | api/password/forgot | | Project\Http\Controllers\Auth\PasswordController@postEmail | guest |
| | POST | api/password/reset | | Project\Http\Controllers\Auth\PasswordController@postReset | guest |
+--------+----------+------------------------------+----------------------+-------------------------------------------------------------+------------+
因此,我查看了不同的与 Auth 相关的类和特征,并在一些帮助下发现我可以通过将 postLogin、postRegister、postEmail、postReset 和 getLogout 路由添加到 AuthController 来覆盖它们。因此,例如 postEmail 现在返回一个响应并位于 AuthController 中:
** AuthController 中的 postEmail 覆盖** 这是原始 postEmail 方法的副本,但返回语句有所更改。
public function postEmail(Request $request)
{
$this->validate($request, [ 'email' => 'required|email' ]);
$response = Password::sendResetLink($request->only('email'), function (Message $message) {
$message->subject($this->getEmailSubject());
});
switch ($response) {
case Password::RESET_LINK_SENT:
return response()->json([ 'message' => trans($response) ], 200);
case Password::INVALID_USER:
return response()->json([ 'message' => trans($response) ], 400);
}
}
但是,由于这个和其他(postLogin、postRegister、postReset 和 getLogout)在 AuthController 中被覆盖,并且重定向被 JSON 响应覆盖,由于某种原因,302 URL 重定向仍然发生,就好像我对 AuthController 所做的更改没有被应用。为什么这仍然不起作用?