tymon/jwt 只能使用默认的 auth.php 中 defaults.guard 吗?
我有如下的一个中间件:
use Auth;
use Closure;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
class Authenticate extends BaseMiddleware
{
public function handle($request, Closure $next){
if( $request->url()==route('lva.login') ){
return $next($request);
}
// 检查此次请求中是否带有 token,如果没有则抛出异常。
try {
$this->checkForToken($request);
} catch (\Throwable $th) {
return response()->json(['message'=>'未登录'],401);
}
try {
if ($this->auth->parseToken()->authenticate()) {
return $next($request);
}
// 刷新用户的 token
$token = $this->auth->refresh();
// 使用一次性登录以保证此次请求的成功
$this->auth->onceUsingId(
$this->auth->manager()->getPayloadFactory()->buildClaimsCollection()->toPlainArray()['sub']
);
//更新请求中的token
$request->headers->set('Authorization','Bearer '.$token);
} catch (JWTException $exception) {
// 如果捕获到此异常,即代表 refresh 也过期了,用户无法刷新令牌,需要重新登录。
return response()->json(['message'=>'登录超时'],401);
}
// 在响应头中返回新的 token
return $this->setAuthenticationHeader($next($request), $token);
}
}
默认的 auth.php 中的 defaults.guard 是web
在不修改 auth.php 中的 guard 的前提下 如何实现 验证 guard 是 api 的情况呢
使用 $this->auth = \Auth::guard(‘api’) 不行 会出现
Method [authenticate] does not exist.
使用
config(['auth.defaults.guard'=>'api'])
可以 但是不想这么用. 有其他好的方法吗。
推荐文章: