Maison  >  Article  >  cadre php  >  Fonction d'authentification de jeton de l'API du framework thinkphp5 [exemple]

Fonction d'authentification de jeton de l'API du framework thinkphp5 [exemple]

藏色散人
藏色散人avant
2021-02-13 10:10:494398parcourir

Ce qui suit est une introduction à la fonction d'authentification de jeton de l'API du framework thinkphp5 de la colonne du didacticiel thinkphp. J'espère que cela sera utile aux amis qui en ont besoin !

Fonction d'authentification de jeton de l'API du framework thinkphp5 [exemple]

Instructions d'utilisation : Générez un jeton et un jeton d'actualisation lors de la connexion, et renvoyez-les au client. Le client reçoit et enregistre le stockage local local, etc., et apporte le jeton à chaque fois. chaque fois qu'il accède à l'interface. Le backend vérifie que le jeton existe et est cohérent avant que l'action suivante puisse être effectuée. S'il n'existe pas, il renvoie que le jeton a expiré. Le client appelle l'interface d'actualisation et transmet le jeton. rafraîchir_token. Le serveur vérifie et la vérification enregistre la base de données en régénérant un nouveau jeton et renvoie l'accès au jeton local Actualiser pour que le client puisse continuer. Lorsque la vérification de rafraîchissement_token échoue, effacez le jeton de base de données, l'heure d'expiration et d'autres informations

Fonction de génération de jeton simple (fichier de fonction public commun)

function create_token($id,$out_time){
  return substr(md5($id.$out_time),5,26);
}

Vérifier la méthode de connexion (modèle)

public function checkLogin($username,$passwd){
    $driver = self::field('driver_id,passwd')->where('zhanghao',$username)->whereOr('phone',$username)->find();
    if (empty($driver)){
      $this->error = '账号不存在';
      return false;
    }
    if ($driver['passwd'] != md5($passwd)){
      $this->error = "密码不正确";
      return false;
    }
    //$out_time = strtotime('+ 1 days');
    $out_time = strtotime('+ 1 minutes');
    $token = create_token($driver['driver_id'],$out_time);
    if(false===self::save(['token'=>$token,'time_out'=>$out_time],['driver_id'=>$driver['driver_id']])){
      $this->error = '登陆失败';
      return false;
    }
    $refresh_token_out_time = strtotime('+ 5 days');
    $refresh_token = create_token($driver['driver_id'],$refresh_token_out_time);
    Cache::set("token",$token,60);
    Cache::set("driver_id",$driver['driver_id'],$refresh_token_out_time);//设置ID的过期时间和更新token的token时间一样用于更新的时候获取用户信息
    Cache::set('refresh_token',$refresh_token,$refresh_token_out_time);
    return ['token'=>$token,'refresh_token'=>$refresh_token,'in_expire'=>$out_time];
}

méthode d'actualisation du jeton (modèle)

public function refreshToken($refresh_token,$token){
    if (!isset(Cache::get('refresh_token')) or Cache::get('refresh_token')!=$refresh_token){
      $this->error = '刷新token失败';
      return false;
    }
    $cache_driver_id = Cache::get('driver_id');
    $driver = self::field('driver_id,passwd')->where('driver_id',$cache_driver_id)->where('token',$token)->find();
    if (empty($driver)){
      $this->error = '参数错误';
      return false;
    }
    $out_time = strtotime('+ 1 days');//新的过期时间
    $token = create_token($driver['driver_id'],$out_time);//更新token
    if(false===self::save(['token'=>$token,'time_out'=>$out_time],['driver_id'=>$driver['driver_id']])){
      Cache::clear($token);
      $this->error = '刷新失败';
      return false;
    }
    Cache::set("token",$token,864000);
    return ['token'=>$token,'in_expire'=>$out_time];
}

Méthode de sortie (modèle)

public function logout($token,$refresh_token=''){
    $driver = self::field('driver_id,passwd')->where('token',$token)->find();
    self::save(['token'=>'','time_out'=>''],['token'=>$token]);
    Cache::clear('token');
    Cache::clear('refresh_token');
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer