获取个人信息失败时,如何自定义 status 以及 message?

拿一个错误的token,和不带token的时候都会报错401,虽然提示的 message 不同,但是还是想自定义 status 码和 message ,请问该在哪里修改,请有实际操作经验的回答我,网上的看了好多,并不完整,请大神指教。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 7
liyu001989

为何要提示的这么细,token错误?未获取token?

可以自己监听具体的异常然后抛出异常的时候设置自己的 code,比如

 \API::error(function (\Illuminate\Database\Eloquent\xxxxxException $exception) {
     throw new \Symfony\Component\HttpKernel\Exception\HttpException($statusCode, $message, null, [], $code);
});

个人感觉没这个必要,401 足够前段判断了。

6年前 评论

@liyu001989 简洁概括一下的话还是自定义错误内容,因为很多前端都是根据 code 来判断的,并不根据 message,所以传了错误的 token 和没传 token 应该是两个 code 。所以自己在获取个人信息的时候抛出异常的话,是自己封装一个中间件呢,还是有其他的方法。如果写一个中间件的话,获取个人信息的时候就已经有验证 token 的中间件了,抛出异常的中间件写在这个中间件后面吗

6年前 评论

@liyu001989 不过对于这种没传值得异常,我想在 controller 里捕获到就直接抛出。类似于 if(empty($a)) 这种判断。不知道规范起来的话应该是什么样子的

6年前 评论
liyu001989

我只是好奇什么场景会因为没有token和token错误,前段需要判断,判断之后呢,该携带token的接口不携带token,始终是前段代码的问题,你是准备怎么办。

状态码就是 401,你只是希望两种情况下增加一个自定义code,让前段判断。教程里面有讲啊,就是我上面的那个代码,获取到不同的异常,抛出自己的异常的时候增加自定义状态码。

一个异常是 Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException
一个是 Tymon\JWTAuth\Exceptions\TokenInvalidException

6年前 评论

你是使用dingo/api吧?可以看看 自带中间件的 api.auth 实现,

文档也有说可以自定义身份验证

自己继承重写一下\Dingo\Api\Auth\Provider\JWTauthenticate 方法,把token获取判断一下是不是空的,自定义一个异常抛出。

6年前 评论

并不推荐做多余的事情,401已经足够了
前端只需要关心401这个状态吗就足够了,并不需要关心,是token错误,或者是没有携带token。

既不推荐对token错误或者没有携带token做两种不同的处理

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!