Laravel 從中介軟體中獲取自定義使用者資訊

CrazyZard發表於2019-12-18

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 協議》,轉載必須註明作者和本文連結

快樂就是解決一個又一個的問題!

相關文章