我是laravel和laravel-passport的新手,我在中等here上关注了这篇文章
一切如我所愿,直到用户尝试在详细信息方法中发送了错误的授权令牌之前尝试处理错误
这是错误:
InvalidArgumentException
未定义路由[登录]。
我正在使用最新的laravel 5.7和护照7.1
我尝试过
使用未经身份验证的方法,但没有希望
/routes/api.php
Route::get('user/login', 'AuthController@login');
// user
Route::get('users/find', 'UserController@index');
//here i am trying this route
//with wrong authorization tocken
Route::middleware('auth:api')->group(function () {
Route::get('user', 'UserController@show');
});
Route::post('user', 'UserController@store');
Route::put('user/{id}', 'UserController@update');
Route::delete('user/{id}', 'UserController@destroy');
/UserController.php
public function show()
{
if(Auth::check()){
$user = auth()->user();
return response()->json(['user'=>auth()->user()], 200);
}else{
return response()->json("can't connect", 400);
}
}
第一段 公共功能show() {
try {
$user = auth()->user();
} catch (\Throwable $th) {
return response()->json("can't connect", 400);
}
return response()->json(['user'=>auth()->user()], 200);
}
第二个片段 /app/exceptions/handler.php
public function render($request, Exception $exception)
{
if ($exception instanceof TokenMismatchException) {
return "Token error";
}
return parent::render($request, $exception);
}
第三段
\ vendor \ laravel \ framework \ src \ Illuminate \ Foundation \ Exceptions \ Handler.php
protected function unauthenticated($request, AuthenticationException $exception)
{
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest($exception->redirectTo() ?? route('login'));
}
错误摘要(可能有用)
public function route($name, $parameters = [], $absolute = true)
{
if (! is_null($route = $this->routes->getByName($name))) {
return $this->toRoute($route, $parameters, $absolute);
}
// the following line is highlighted
throw new InvalidArgumentException("Route [{$name}] not defined.");
}
我希望返回的是json而不是此错误模板
因为您可能发现我正在尝试构建一个宁静的API
答案 0 :(得分:1)
您可以创建一个自定义错误,并在render方法中添加标准响应,然后可以返回所需的json。
例如,创建一个新的异常App/Exceptions/CustomInvalidTokenException.php
:
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Http\Request;
class CustomInvalidTokenException extends Exception
{
/**
* Render the exception into an HTTP response.
*
* @param \Illuminate\Http\Request
* @return \Illuminate\Http\Response
*/
public function render(Request $request)
{
return response()->json([
'error' => $this->getMessage(),
'status' => 0
], 500);
}
}
然后在控制器中将其抛出并在内部将为您呈现异常响应:
<?php
try{
// something
}
catch(TokenMismatchException $e){
throw new CustomInvalidTokenException('Invalid token found');
}
如果您想以全局方式而不是在特定路径上处理异常,则可以在handler.php中执行throw new CustomInvalidTokenException