Heim Backend-Entwicklung PHP-Problem So legen Sie ein Token in PHP fest

So legen Sie ein Token in PHP fest

Sep 25, 2020 pm 02:06 PM
token

So legen Sie ein Token in PHP fest: Definieren Sie zuerst den Routing-Pfad, um das Token zu erhalten, und erstellen Sie dann die Benutzerklasse in der Modellebene und erstellen Sie entsprechende Überprüfungsmethoden und Ausnahmebehandlung in der Validator-Klasse und der Ausnahmeklasse ; Vervollständigen Sie schließlich das Token. Schreiben Sie einfach das Token.

So legen Sie ein Token in PHP fest

Empfohlen: „PHP-Video-Tutorial

Für die von uns entwickelte Back-End-API-Schnittstelle gelten Berechtigungsanforderungen für Besucher. Beispielsweise erfordern einige Schnittstellen, die private Informationen enthalten, dass Besucher die Schnittstelle gleichzeitig anfordern Geben Sie dem Besucher einen Token weiter, der ihm im Voraus ausgehändigt wurde.

Das ist wie ein Token, wir „überlassen“ den Besucher nur, wenn er es zeigt.

Das Folgende ist eine Aufzeichnung der Code-Schreibideen für Berechtigungstoken.

1. Prozessübersicht

Definieren Sie den Routing-Pfad zum Erhalten des Tokens und akzeptieren Sie die Codeparameter (Codequelle: WeChat-Server, das Anmeldesystem basiert auf dem WeChat-System)

Richten Sie die Service-Schicht ein und erstellen Sie die Token-Basis Klasse und UserToken-Klasse in dieser Ebene

Die UserToken-Klasse verwaltet die gesamte Logik: Token-Generierung und -Rückgabe

Etablieren Sie die User-Klasse in der Modellebene, die für das Lesen und Schreiben von Benutzerdatentabellen verantwortlich ist und von UserToken aufgerufen werden kann Die Service-Schicht

Erstellen Sie entsprechende Überprüfungsmethoden und Ausnahmen in der Validator-Klasse und der Ausnahmeklasse. Verarbeitung

Controller->Service-Schicht->Modellschicht gibt den Wert an die Service-Schicht zurück->Service-Schicht gibt den Wert an den Controller zurück Der Prozess schließt das Schreiben von Token-Tokens ab

2. Spezifische Anweisungen

Definieren Sie zunächst den Routing-Pfad:

Route::post(    'api/:version/token/user',    'api/:version.Token/getToken');
Nach dem Login kopieren

Erstellen Sie dann einen Token-Controller und definieren Sie die getToken-Methode, die dem Routing-Pfad entspricht:

public function getToken($code='') {
        (new TokenGet())->goCheck($code); // 验证器        $token = (new UserToken($code))->get();        return [            'token' => $token
        ];
    }
Nach dem Login kopieren

Bevor Sie die Service-Schicht aufrufen, müssen Sie Folgendes tun: müssen die übergebenen Parameter überprüfen, also definieren Sie den TokenGet-Validator:

class TokenGet extends BaseValidate
{
    protected $rule = [      'code' => 'require|isNotEmpty'
    ];
 
    protected $message = [        'code' => '需要code才能获得Token!'
    ];
 }
Nach dem Login kopieren

Zurück zum Token-Controller rufen wir nach bestandener Überprüfung die UserToken-Klasse auf, die von der Service-Schicht definiert wird:

$token = (new UserToken($code))->get();
Nach dem Login kopieren

Hier besprechen wir die Service-Schicht und die Modellschicht. Unser allgemeines Verständnis ist, dass die Serviceschicht eine abstrakte Kapselung ist, die auf der Modellschicht basiert.

Die Modellschicht ist nur für den Betrieb der Datenbank und deren Rückgabe an die Serviceschicht verantwortlich.

Dann übernimmt die Serviceschicht die Geschäftslogik und gibt sie schließlich an die Controllerschicht zurück.

Aber ich denke, bei kleinen Projekten ist der Service tatsächlich aktiviert Die gleiche Ebene wie das Modell, da einige einfache Schnittstellenmodellschichten direkt mit dem Controller verbunden werden können. Nur relativ komplexe Schnittstellen, z. B. Benutzerberechtigungen, können über die Serviceschicht in Codes für verschiedene Funktionen unterteilt werden.

Diese Art der Verarbeitung ist flexibler. Es gibt eine große Anzahl wirklich einfacher Schnittstellen und es ist nicht erforderlich, die Serviceschicht einmal zu durchlaufen. Dies ähnelt eher dem Durchlaufen der Bewegungen und hat keine Bedeutung.

Zurück zum Code-Schreiben der Service-Schicht. Da es verschiedene Arten von Token gibt, erstellen wir zunächst eine Token-Basisklasse, die einige gängige Methoden enthält. Dann erfolgt die Vorbereitung der UserToken-Klasse, die das Token an den Besucher zurückgibt.

Da es auf WeChat basiert, benötigen wir drei Informationen: Code, Appid, Appsecret und weisen dann der UserToken-Klasse über den Konstruktor einen Anfangswert zu:

function __construct($code) {    $this->code = $code;    $this->wxAppID = config('wx.app_id');    $this->wxAppSecret = config('wx.app_secret');    $this->wxLoginUrl = sprintf(
        config('wx.login_url'),        $this->wxAppID, $this->wxAppSecret, $this->code
    );
    }
Nach dem Login kopieren

Dann fügen Sie diese drei an die Parameterposition der Schnittstelle ein bereitgestellt von WeChat. Der Zweck besteht darin, eine vollständige serverseitige WeChat-URL zu erhalten und die von uns benötigte OpenID anzufordern.

Dann wird hier der Schritt des Sendens einer Netzwerkanfrage übersprungen. Der WeChat-Server gibt ein Objekt zurück, das openid enthält. Nachdem wir festgestellt haben, dass der Wert dieses Objekts in Ordnung ist, starten wir den Prozess der Generierung des Tokens:

private function grantToken($openidObj) {
 
        // 取出openid        $openid = $openidObj['openid'];
         
        // 通过Model层调用数据库,检查openid是否已经存在        $user = UserModel::getByOpenID($openid);
         
        // 如果存在,不处理,反之则新增一条user记录        if ($user) {            $uid = $user->id;
        } else {
            // 不存在,生成一条数据,具体方法略过            $uid = $this->newUser($openid); 
        }
         
        // 生成令牌,写入缓存(具体方法见下面的定义)        $cachedValue = $this->prepareCacheValue($openidObj, $uid);        $token = $this->saveToCache($cachedValue);
         
        // 令牌返回到调用者端        return $token;
}
 
private function prepareCacheValue($openidObj, $uid) {    $cachedValue = $openidObj;    $cachedValue['uid'] = $uid;    $cachedValue['scope'] = 16; // 权限值,自己定义    return $cachedValue;
}
     
private function saveToCache($cachedValue) {    $key = self::generateToken(); // 生成令牌的方法    $value = json_encode($cachedValue);    $tokenExpire = config('setting.token_expire'); // 设定的过期时间    $request = cache($key, $value, $tokenExpire);        if (!$request) {
            throw new TokenException([            'msg' => '服务器缓存异常',            'errorCode' => 10005
        ]);
    }    return $key; // 返回令牌:token
}
Nach dem Login kopieren

Wie Sie sehen können, ist der Kernprozess:

Holen Sie sich die OpenID.

Überprüfen Sie die Datenbank und prüfen Sie, ob die OpenID bereits vorhanden ist.

Wenn sie vorhanden ist, verarbeiten Sie sie nicht. Andernfalls fügen Sie einen neuen Benutzerdatensatz hinzu an den Client

Die Methode genericToken() ist im Detail wie folgt definiert:

public static function generateToken() {    $randomChars = getRandomChars(32); // 32个字符组成一组随机字符串    $timestamp = $_SERVER['REQUEST_TIME_FLOAT'];  
    $salt = config('security.token_salt'); // salt 盐
    // 拼接三组字符串,进行MD5加密,然后返回    return md5($randomChars.$timestamp.$salt);
}    
function getRandomChars($length) {    $str = null;    $strPoll = &#39;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&#39;;    $max = strlen($strPoll) - 1;    for ($i = 0; $i < $length; $i++) {        $str .= $strPoll[rand(0, $max)];
    }    return $str;
}
Nach dem Login kopieren

Ihre Hauptfunktion besteht zweifellos darin, das von uns benötigte Token zu generieren – Token-String. Es ist erwähnenswert, dass „generateToken()“ auch in anderen Token-Typen verwendet wird und daher in der Token-Basisklasse platziert wird.

Zu diesem Zeitpunkt müssen Sie nur noch das generierte Token an den Controller zurückgeben.

3. Zusammenfassung

Das Schreiben von Token umfasst viele Prozesse. Um Verwirrung zu vermeiden, stellen Sie sicher, dass Sie die für verschiedene Aufgaben verantwortlichen Codes auf unterschiedliche Weise definieren. Wie die Methode grantToken() im obigen Beispiel zeigt, handelt es sich hierbei um eine Kernmethode, die alle Prozesse einschließt. In anderen Methoden werden jedoch verschiedene spezifische Prozesse definiert und dann dem Methodenaufruf grantToken() bereitgestellt.

Danach ist die grantToken()-Methode immer noch leicht zu lesen, obwohl sie alle Prozesse enthält.

Das obige ist der detaillierte Inhalt vonSo legen Sie ein Token in PHP fest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was tun, wenn das Login-Token ungültig ist? Was tun, wenn das Login-Token ungültig ist? Sep 14, 2023 am 11:33 AM

Zu den Lösungen für ungültige Login-Tokens gehören die Überprüfung, ob das Token abgelaufen ist, die Überprüfung, ob das Token korrekt ist, die Überprüfung, ob das Token manipuliert wurde, die Überprüfung, ob das Token mit dem Benutzer übereinstimmt, das Löschen des Caches oder der Cookies sowie die Überprüfung der Netzwerkverbindung und des Serverstatus , sich erneut anmelden oder ein neues Token anfordern usw. Detaillierte Einführung: 1. Überprüfen Sie, ob das Token abgelaufen ist. Sobald die Gültigkeitsdauer überschritten ist, wird das Anmelde-Token als ungültig betrachtet.

So lösen Sie das Problem eines ungültigen Anmeldetokens So lösen Sie das Problem eines ungültigen Anmeldetokens Sep 14, 2023 am 10:57 AM

Das Problem eines ungültigen Anmeldetokens kann gelöst werden, indem die Netzwerkverbindung überprüft, die Gültigkeitsdauer des Tokens überprüft, Cache und Cookies geleert, der Anmeldestatus überprüft, der Anwendungsentwickler kontaktiert und die Kontosicherheit erhöht wird. Detaillierte Einführung: 1. Überprüfen Sie die Netzwerkverbindung, stellen Sie die Verbindung zum Netzwerk wieder her oder ändern Sie die Netzwerkumgebung. 2. Überprüfen Sie die Gültigkeitsdauer des Tokens, besorgen Sie sich ein neues Token oder wenden Sie sich an den Entwickler der Anwendung. 3. Löschen Sie den Cache und die Cookies, löschen Sie den Browser Cache und Cookie und melden Sie sich dann erneut bei der Anwendung an. 4. Überprüfen Sie den Anmeldestatus.

So lösen Sie das Problem der Speicherung von Benutzertokens in Redis So lösen Sie das Problem der Speicherung von Benutzertokens in Redis May 31, 2023 am 08:06 AM

Redis speichert Benutzertokens. Beim Entwerfen eines E-Commerce-Systems besteht eine häufige Anforderung darin, dass jede Seite angemeldete Benutzerinformationen enthalten muss. Es gibt zwei gängige Lösungen: die Verwendung von Cookies zum Speichern und die Verwendung von JWT zum Speichern. Wenn jedoch Redis-Cache im System verwendet wird, gibt es auch eine dritte Lösung – das Zwischenspeichern des Benutzertokens in Redis. Generieren Sie beim Anmelden ein Token und speichern Sie es in Redis //Generieren Sie ein Token-Objekt und speichern Sie es in Redis redisTemplate.opsForHash().put("token","user",user)

Wie Vue3+Vite zwei Token verwendet, um eine sinnlose Aktualisierung zu erreichen Wie Vue3+Vite zwei Token verwendet, um eine sinnlose Aktualisierung zu erreichen May 10, 2023 pm 01:10 PM

1. Token-Anmeldeauthentifizierungs-JWT: JSONWebToken. Dabei handelt es sich um ein Authentifizierungsprotokoll, das im Allgemeinen zur Überprüfung der angeforderten Identitätsinformationen und Identitätsberechtigungen verwendet wird. Besteht aus drei Teilen: Header, Hayload, Signatureheader: Das sind die Header-Informationen, die die grundlegenden Informationen zur Beschreibung dieses Tokens darstellen. Das JSON-Format {"alg": "HS256" // gibt den Signaturalgorithmus an. Der Standardwert ist HMACSHA256 ( geschrieben als HS256) „type“: „JWT“//Gibt den Typ des JWT-Tokens an, der einheitlich als JWT}pa geschrieben wird

Wie behebt man den C++-Syntaxfehler: „Erwarteter Primärausdruck vor „:'-Token'? Wie behebt man den C++-Syntaxfehler: „Erwarteter Primärausdruck vor „:'-Token'? Aug 26, 2023 pm 04:06 PM

Wie behebt man den C++-Syntaxfehler: 'expectedprimary-expressionbefore':'token'? Syntaxfehler sind ein häufiges Problem bei der C++-Programmierung. Einer der häufigsten Fehler ist die Fehlermeldung „expectedprimary-expressionbefore‘:‘token“. Dieser Fehler tritt normalerweise auf, wenn bedingte Ausdrücke und der ternäre Operator verwendet werden. In diesem Artikel wird die Ursache dieses Fehlers vorgestellt

Was bedeutet Token? Was bedeutet Token? Feb 29, 2024 am 10:19 AM

Token ist eine Art virtuelle Währung. Es handelt sich um eine digitale Währung, die zur Darstellung von Benutzerberechtigungen, zur Aufzeichnung von Transaktionsinformationen und zur Bezahlung virtueller Währungen verwendet wird. Token können zur Durchführung von Transaktionen in einem bestimmten Netzwerk, zum Kauf oder Verkauf bestimmter virtueller Währungen und auch zur Bezahlung bestimmter Dienste verwendet werden.

Der ChatGPT-Kurs von Andrew Ng ging viral: Die KI verzichtete darauf, Wörter rückwärts zu schreiben, verstand aber die ganze Welt Der ChatGPT-Kurs von Andrew Ng ging viral: Die KI verzichtete darauf, Wörter rückwärts zu schreiben, verstand aber die ganze Welt Jun 03, 2023 pm 09:27 PM

Unerwarteterweise würde ChatGPT bis heute immer noch dumme Fehler machen? Meister Ng Enda hat in der letzten Klasse darauf hingewiesen: ChatGPT wird keine Wörter umkehren! Wenn Sie beispielsweise das Wort „lollipop“ umkehren lassen, lautet die Ausgabe „pilollol“, was völlig verwirrend ist. Oh, das ist in der Tat etwas überraschend. So sehr, dass, nachdem ein Internetnutzer, der der Klasse zugehört hatte, einen Beitrag auf Reddit gepostet hatte, dieser sofort eine große Anzahl von Zuschauern anzog und der Beitrag schnell 6.000 Aufrufe erreichte. Und das ist kein zufälliger Fehler. Netizens haben festgestellt, dass ChatGPT diese Aufgabe tatsächlich nicht abschließen kann, und das Gleiche gilt für unsere persönlichen Testergebnisse. △Der eigentliche Test von ChatGPT (GPT-3.5) und sogar vielen Produkten, darunter Bard, Bing, Wen Xinyiyan usw., funktioniert nicht. △Eigentlicher Test Bard△Eigentlicher Test Wen Xinyiyan

Was ist die Verwendung von Token in Vue? Was ist die Verwendung von Token in Vue? Jan 29, 2023 am 10:31 AM

Token in Vue ist eine auf der Serverseite generierte Zeichenfolge, die als Token für Clientanforderungen verwendet wird. 1. Kapseln Sie die Methode zum Betrieb des lokalen Speichers. 2. Verwenden Sie ihn nach der Kapselung zum Mounten 3. Fügen Sie „token“ in „request.js“ ein. 4. Legen Sie Routing-Guards in „index.vue“ unter „Router“ fest.

See all articles