首页 文章

Laravel Dingo JWT

提问于
浏览
0

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

它工作正常,我已将Dingo配置设置为 protected ,因此总是需要有效的JWT令牌,否则会因401错误而失败 . 它再次正常工作 .

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

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

至少我想让“JWT已经过期”改为自定义文本,无论是从JWT还是Dingo,但当然如果它可以进一步定制,那就太棒了 .

有什么建议?谢谢

2 回答

  • 1

    我找到了解决方案

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

    默认是

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

    变成

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

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

  • 1

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

    <?php
    
    namespace App\Http\ApiControllers\V1;
    
    use App\Http\Controllers\Controller;
    use Dingo\Api\Routing\Helpers;
    
    class BaseController extends Controller
    {
        use Helpers;
    }
    

    AuthController

    <?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

相关问题