alias('a') ->join('shop s', 's.id = a.shop_id') ->field(['a.id', 'a.account', 'a.name', 'role_id', 'shop_id', 's.name' => 'shop_name', 's.logo' => 'shop_logo']) ->where(['a.account' => $params['account'], 'a.del' => 0]) ->findOrEmpty()->toArray(); $admin['shop_logo'] = UrlServer::getFileUrl($admin['shop_logo']); $admin['token'] = self::createSession($admin['id'], $params['client']); //登录信息更新 $adminModel->where(['account' => $params['account']])->update([ 'login_ip' => request()->ip(), 'login_time' => time() ]); return $admin; } /** * @notes 退出登录 * @param $user_id * @param $client * @return SessionModel * @author 段誉 * @date 2021/11/9 16:37 */ public static function logout($user_id, $client) { $time = time(); $token = (new ShopSession()) ->where(['admin_id' => $user_id, 'client' => $client]) ->value('token'); Cache::delete($token); return (new ShopSession()) ->where(['admin_id' => $user_id, 'client' => $client]) ->update(['update_time' => $time, 'expire_time' => $time]); } /** * @notes 创建会话 * @param $admin_id * @param $client * @return string * @author 段誉 * @date 2021/11/9 16:38 */ public static function createSession($admin_id, $client) { //清除之前缓存 $token = SessionModel::where(['admin_id' => $admin_id, 'client' => $client]) ->value('token'); if ($token) { Cache::delete($token); } $result = SessionModel::where(['admin_id' => $admin_id, 'client' => $client]) ->findOrEmpty(); $time = time(); $expire_time = $time + Config::get('project.token_expire_time'); // 新token $token = md5($admin_id . $client . $time); $shop_amdin = ShopAdmin::where(['id' => $admin_id])->findOrEmpty(); $data = [ 'shop_id' => $shop_amdin['shop_id'], 'admin_id' => $admin_id, 'token' => $token, 'client' => $client, 'update_time' => $time, 'expire_time' => $expire_time, ]; if ($result->isEmpty()) { SessionModel::create($data); } else { SessionModel::where(['admin_id' => $admin_id, 'client' => $client]) ->update($data); } //更新登录信息 $login_ip = request()->ip(); ShopAdmin::where(['id' => $admin_id]) ->update(['login_time' => $time, 'login_ip' => $login_ip]); // 获取最新的用户信息 $admin_info = ShopAdmin::alias('a') ->join('shop_session s', 'a.id=s.admin_id') ->where(['s.token' => $token]) ->field('a.*,s.token,s.client') ->find(); $admin_info = $admin_info ? $admin_info->toArray() : []; //创建新的缓存 $ttl = 0 + Config::get('project.token_expire_time'); Cache::set($token, $admin_info, $ttl); return $token; } }