核心
1 extend basemodel
2 basemodel的before_insert after_insert方法里面 为obj加入update_user_name add_username
3 如何获取当前登录用户?
3.1 中间件获取接下token 获取userinfo 存储到request['userInfo']中
3.2 自定义request对象,新增代理request,加入setUserinfo getuserinfo方法
extend basemodel
```
<?php
namespace app\model;
use app\dto\PageDto;
use app\Request;
use think\db\BaseQuery;
use think\facade\Db;
use think\model\concern\SoftDelete;
class BaseModel extends \think\Model
{
use SoftDelete;
var $id = "";
protected $convertNameToCamel = true;
protected $deleteTime = "delete_time";
protected $autoWriteTimestamp = 'datetime';
protected $dateFormat = 'Y-m-d H:i:s';
static function pageList(PageDto $page, BaseQuery $query)
{
return $query->page($page->getPageNum(),
$page->getPageSize()
);
}
public static function onBeforeInsert($obj)
{
$request = \request();
$userInfo = $request->getUserInfo();
$obj['createUserId'] = $userInfo['id'] ?? '';
$obj['createUserName'] = $userInfo['username'] ?? '';
return $obj;
}
public static function onBeforeUpdate($obj)
{
$request = \request();
$userInfo = $request->getUserInfo();
$obj['updateUserId'] = $userInfo['id'] ?? '';
$obj['updateUserName'] = $userInfo['username'] ?? '';
return $obj;
}
}
```
3.2 自定义request对象,新增代理request,加入setUserinfo getuserinfo方法
```
$app= new App();
$app->bind('myrequest', \app\proxy\MyRequest::class);
$request =$app->make('myrequest');
$http =$app->http;
//$request
$response = $http->run($request);
$response->send();
$http->end($response);
```
//MyRequest
class MyRequest extends Request {
var $userInfo;
/**
* @return mixed
*/
public function getUserInfo()
{
return $this->userInfo;
}
/**
* @param mixed $userInfo
*/
public function setUserInfo($userInfo): void
{
$this->userInfo = $userInfo;
}
}
拦截器 TokenMiddleware
class TokenMiddleware
{
var $whiteList = [
"/auth/login",
'/phpinfo'
];
/*
* 判断用户是否有token 有登陆过
* 排除白名单
* */
public function handle( $request, \Closure $next)
{
$currentUrl = $request->baseUrl();
Log::info("操作路径 $currentUrl");
$filterList = array_filter($this->whiteList, function ($str) use ($currentUrl) {
return $str == $currentUrl;
});
// dd($filterList,count($filterList));
$isyes = count($filterList) > 0;
if ($isyes) {
return $next($request);
}
$authorizationstr=$request->header('Authorization');
$token = substr($authorizationstr,7,strlen($authorizationstr));
// dd($token,is_null($token));
/* 判断 token 是否可以在 redis找到 */
if (is_null($token)) {
return json(['code' => 401, 'message' => '没有token'], 401);
}
/*redis 能不能找到东西*/
// $userFromRedis = Cache::store("redis")->get("token:$token");
$userFromRedis = RedisService::$client->get("token:$token");
if (is_null($userFromRedis)) {
return json(['code' => 401, 'message' => 'token失效'], 401);
}
$userFromRedis = json_decode($userFromRedis, true);
$request->setUserInfo($userFromRedis);
// $request->setUserInfo=($userFromRedis);
return $next($request);
}
}