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(); }

浙公网安备 33010602011771号