Laravel 澳洲野狗 JWT
Laravel Dingo JWT
我目前正在 Laravel 中编码一个 API,使用 Dingo and JWT 作为其身份验证
它工作正常,我已将 Dingo 配置设置为 protected
,因此始终需要一个有效的 JWT 令牌,否则它将失败并显示 401 错误。再次正常工作。
问题是..如何自定义错误消息?目前显示是这样的
{
message: "JWT has expired",
status_code: 401,
debug: { "..."
}
}
至少我想将 "JWT has expired" 更改为来自 JWT 或 Dingo 的自定义文本,当然,如果可以进一步自定义,那就太好了。
有什么建议吗?谢谢
我找到了解决方案
通过创建我自己的提供程序(或者更确切地说是扩展默认的 FirebaseProvider)并将配置设置为使用自定义提供程序
默认为
'provider' => 'Tymon\JWTAuth\Providers\FirebaseProvider'
改为
'provider' => 'CustomPackages\Providers\MyFirebaseProvider'
我同意这个解决方案可能不是最优雅的方式。但它有效,我很高兴听到其他解决方案
我的解决方案是创建一个 AuthController class,如下代码:
<?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
我目前正在 Laravel 中编码一个 API,使用 Dingo and JWT 作为其身份验证
它工作正常,我已将 Dingo 配置设置为 protected
,因此始终需要一个有效的 JWT 令牌,否则它将失败并显示 401 错误。再次正常工作。
问题是..如何自定义错误消息?目前显示是这样的
{
message: "JWT has expired",
status_code: 401,
debug: { "..."
}
}
至少我想将 "JWT has expired" 更改为来自 JWT 或 Dingo 的自定义文本,当然,如果可以进一步自定义,那就太好了。
有什么建议吗?谢谢
我找到了解决方案
通过创建我自己的提供程序(或者更确切地说是扩展默认的 FirebaseProvider)并将配置设置为使用自定义提供程序
默认为
'provider' => 'Tymon\JWTAuth\Providers\FirebaseProvider'
改为
'provider' => 'CustomPackages\Providers\MyFirebaseProvider'
我同意这个解决方案可能不是最优雅的方式。但它有效,我很高兴听到其他解决方案
我的解决方案是创建一个 AuthController class,如下代码:
<?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