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

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

藏色散人
Libérer: 2021-02-13 10:10:49
avant
4545 Les gens l'ont consulté

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);
}
Copier après la connexion

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];
}
Copier après la connexion

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];
}
Copier après la connexion

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');
}
Copier après la connexion

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!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal