2015-02-25 4 views
0

В настоящее время я кодирование API в Laravel с Dingo и JWT как его аутентификациейLaravel Dingo JWT

Он отлично работает, и я поставил Динго конфигурации для protected, поэтому действительный маркер JWT всегда должен быть там, в противном случае он будет с ошибкой 401. Опять работает отлично.

Вопрос в том, как я могу настроить сообщение об ошибке? На данный момент он показывает, как этот

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

, как минимум, я хочу, чтобы получить «JWT истекло» изменено на произвольный текст, либо из JWT или Динго, но, конечно, если он может быть изменен в дальнейшем, это было бы здорово ,

Любые советы? Благодаря

ответ

1

Я нашел решение

Создавая свой собственный провайдер (или, скорее, простирающийся по умолчанию FirebaseProvider) и установить конфиг использовать пользовательский поставщик

По умолчанию

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

изменилось до

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

Я согласен, что это soluti не может быть самым элегантным способом. Но это работает, и я рад услышать о других решений

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