0

我目前正在使用DingoJWT在 Laravel 中编写一个 API作为其身份验证

它工作正常,并且我已将 Dingo 配置设置为protected,因此始终需要有效的 JWT 令牌,否则它将失败并出现 401 错误。再次它工作正常。

问题是..如何自定义错误消息?目前显示是这样的

{
    message: "JWT has expired",
    status_code: 401,
    debug: { "..."
    }
}

至少我想将“JWT 已过期”更改为自定义文本,无论是来自 JWT 还是 Dingo,但当然,如果它可以进一步定制,那就太好了。

有什么建议吗?谢谢

4

2 回答 2

1

我找到了解决方案

通过创建我自己的提供程序(或者更确切地说扩展默认的 FirebaseProvider)并将配置设置为使用自定义提供程序

默认是

'provider' => 'Tymon\JWTAuth\Providers\FirebaseProvider'

变成

'provider' => 'CustomPackages\Providers\MyFirebaseProvider'

我同意这个解决方案可能不是最优雅的方式。但它有效,我很高兴听到其他解决方案

于 2015-02-25T04:01:30.170 回答
1

我的解决方案是创建一个 AuthController 类,如下代码:

<?php

namespace App\Http\ApiControllers\V1;

use App\Http\Controllers\Controller;
use Dingo\Api\Routing\Helpers;

class BaseController extends Controller
{
    use Helpers;
}

授权控制器

<?php
/**
 * Created by PhpStorm.
 * User: ***
 * Date: 26/10/2016
 * Time: 14:07
 */

namespace App\Http\ApiControllers\V1;

use App\Http\Requests\AddUserRequest;
use App\Http\Transformer\UserTransformer;
use Illuminate\Http\Request;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException;


class AuthController extends BaseController
{

    public function authenticate(Request $request)
    {
        // grab credentials from the request
        $credentials = $request->only('email', 'password');
        try {
            // attempt to verify the credentials and create a token for the user
            if (!$token = JWTAuth::attempt($credentials)) {
                //                return response()->json(['error' => 'invalid_credentials'], 401);
                //return response()->json(['error' => '用户名或密码错误'], 401);
                return $this->response->error('用户名或密码错误', 401);
            }
        } catch (JWTException $e) {
            // something went wrong whilst attempting to encode the token
            //            return response()->json(['error' => 'could_not_create_token'], 500);
            //            return response()->json(['error' => '创建 token 失败'], 500);
            return $this->response->error('创建 token 失败', 500);
        }

        // all good so return the token
        return response()->json(compact('token'));

        //        return $this->response->item($token);
    }


    public function getAuthenticatedUser()
    {
        try {

            if (!$user = JWTAuth::parseToken()->authenticate()) {
                return $this->response->errorNotFound('没有此用户');
            }

        } catch (TokenExpiredException $e) {

            return $this->response->errorUnauthorized('token_expired');

        } catch (TokenInvalidException $e) {

            return $this->response->errorBadRequest('token_invalid');

        } catch (JWTException $e) {

            return $this->response->errorInternal('token_absent');

        }

          return $this->response->item($user,new UserTransformer());
    }


}

然后,您可以根据需要自定义错误消息。有关更多信息,您可以参考https://github.com/tymondesigns/jwt-auth/wiki/Authentication

于 2016-11-30T14:06:25.980 回答