thinkphp token认证(跨域)
参考:https://www.php.cn/faq/563482.html
1.生成token
//生成登录token $wcToken = ''; $cacheToken = Cache::get('wucun_token_'.$this->userInfo['id']); if($cacheToken){ $wcToken = $cacheToken; }else{ $common = new Common(); $tokenData = $common->encodeWucunToken($this->userInfo['id']); if($tokenData['code']==0){ $wcToken = $tokenData['data']['token']; } }
public function encodeWucunToken(int $uid=0): array { if(empty($uid)){ return ['code' => 1, 'msg' => '参数错误']; } $time = time(); $payload = ["iat" => $time, "nbf" => $time, "exp" => $time + 86400, 'uid' => $uid]; try { $token = JWT::encode($payload,'wucun&app','HS256'); Cache::set('wucun_token_'.$uid,$token,86400); return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'token' => $token ] ]; }catch (\Exception $e){ return ['code' => 1, 'msg' => '系统异常,请稍后重试']; } }
解密:
public function appLogin(Request $request) { $msg = ''; $jwt = $request->param('token','','trim'); if(empty($jwt)){ $msg = '非法请求'; }else{ try { $decoded = JWT::decode($jwt,new Key('wucun&app','HS256')); if($decoded->uid>0){ $member = Db::connect('db_config1') ->name('member') ->field('id,nickname,phone,profile,status') ->where('id','=',$decoded->uid) ->find(); if(empty($member) || $member['status']==0){ $msg = '会员不存在或被禁用'; }else{ $member['profile'] = $this->staticCosUrl.$member['profile']; //存储用户session信息 Session::set('userInfo',$member); } }else{ $msg = 'token无效'; } }catch (ExpiredException|\Exception $e){ $msg = '请求异常,请稍后重试'; } } if(empty($msg)){ $this->redirect('/console'); } $this->assign('msg',$msg); return $this->fetch(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话