Ларавел Динго JWT

Я в настоящее время кодирую API в Laravel с Динго а также JWT как его аутентификация

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

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

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

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

Любой совет? Спасибо

0

Решение

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

Создавая моего собственного провайдера (или, вернее, расширяя 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

1

По вопросам рекламы [email protected]