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();
    }
复制代码

 

posted @   流浪2024  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示