Die folgende Tutorial-Kolumne von thinkphp stellt Ihnen [Beispiel] die API-Token-Authentifizierungsfunktion des Thinkphp5-Frameworks vor. Ich hoffe, dass sie Freunden in Not hilfreich sein wird!
Gebrauchsanweisung: Generieren Sie beim Anmelden ein Token und ein Refresh_token und geben Sie es an den Client zurück. Der Client empfängt und speichert den lokalen lokalen Speicher usw. Jede Zugriffsschnittstelle bringt das Token und das Backend überprüft, ob das Token vorhanden ist und ist vor der Ausführung konsistent. Die nächste Aktion besteht darin, das abgelaufene Token zurückzugeben. Der Client ruft die Aktualisierungsschnittstelle auf, um das Token zu übergeben, und der Server überprüft es, indem er ein neues Token generiert und gibt es an den Client zurück. Wenn die Überprüfung des Aktualisierungstokens fehlschlägt, löschen Sie das Datenbanktoken, die Ablaufzeit und andere Informationen.
function create_token($id,$out_time){ return substr(md5($id.$out_time),5,26); }
Verifizierung Anmeldemethode (Modell)
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]; }
Token-Aktualisierungsmethode (Modell)
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]; }
Exit-Methode (Modell)
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'); }
Das obige ist der detaillierte Inhalt vonthinkphp5-Framework-API-Token-Authentifizierungsfunktion [Beispiel]. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!