1.老版本的使用者認證在BaseController裡面做認證,但是無法適應新的APP使用者驗證
2.老版本的中介軟體只是做使用者許可權驗證,不能判斷使用者是否已失效
1.做一版本的,能夠通過路由中間價進行使用者認證(api,app端),以及Controllers 拿到自定義的使用者資訊
1.定義新的中介軟體
protected $routeMiddleware = [
'refresh' => \App\Http\Middleware\RefreshToken::class,
]
2.新建中介軟體
<?php
namespace App\Http\Middleware;
class RefreshToken extends BaseMiddleware
{
public function handle($request, Closure $next)
{
// 使用 try 包裹,以捕捉 token 過期所丟擲的 TokenExpiredException 異常
try {
// 檢查此次請求中是否帶有 token,如果沒有則丟擲異常。
$this->checkForToken($request);
// 檢測使用者的登入狀態,如果正常則通過
if ($this->auth->parseToken()->authenticate() && $this->auth->user()->id) {
$user_id = $this->auth->user()->id;
//兩種方式傳值至控制器
$request->attributes->add(['user'=>$user]]);
$request->setUserResolver(function () use($user_id,$user){
return $user;
});
}
}catch (JWTException $exception){
return $this->sendError('驗證失敗!');
}
}
}
3.控制器接受引數 不定義auth_user
public function __get($key)
{
if ($key == 'auth_user') {
return Request::user();
}
}
//如果應用使用了dingo的話,
public function __get($key)
{
$callable = [
'api', 'user', 'auth', 'response',
];
if (in_array($key, $callable) && method_exists($this, $key)) {
return $this->$key();
}
if ($key == 'auth_user') {
//兩種方式
return request()->get('user');
return Request::user();
}
throw new .rrorException('Undefined property ' . get_class($this) . '::' . $key);
}
4.使用方式
$this->auth_user
本作品採用《CC 協議》,轉載必須註明作者和本文連結