Heim  >  Artikel  >  Backend-Entwicklung  >  Warum funktioniert mein benutzerdefinierter Echo-JWT-Code nicht?

Warum funktioniert mein benutzerdefinierter Echo-JWT-Code nicht?

WBOY
WBOYnach vorne
2024-02-08 22:50:341153Durchsuche

为什么我的 echo jwt 自定义代码不起作用?

php-Editor Yuzai erhält häufig Fragen von Lesern. Eine der häufigsten Fragen lautet: „Warum funktioniert mein benutzerdefinierter Echo-JWT-Code nicht?“. Bei der Verwendung von JWT (JSON Web Token) kommt es manchmal vor, dass benutzerdefinierter Code nicht funktioniert. Dies kann an einigen häufigen Problemen liegen. In diesem Artikel werden wir diese Frage ausführlich beantworten und Lösungen anbieten, die den Lesern helfen, dieses Problem zu lösen, das sie stört. Lass uns einen Blick darauf werfen!

Frageninhalt

Ich verwende echo jwt, um den Benutzer zu authentifizieren. Ich habe es angepasst, als ich mir das Handbuch angesehen habe, aber es wird nicht angewendet. Ich möchte zwei Dinge.

  1. Ich möchte eine Token-Prüfung ohne Inhaberschlüsselwort durchführen

  2. Ich möchte eine Fehlermeldung zurückgeben, die für den Fall geeignet ist, dass das Token nicht gefunden wird oder ungültig ist.

Wie ändere ich den obigen Code, um den gewünschten Effekt zu erzielen?

Ich habe gerade angefangen, Golang zu lernen, ich wäre für jeden Rat sehr dankbar

output := echojwt.JWT(&echojwt.Config{
        SigningKey:  []byte(key.EnvSecretKey),
        TokenLookup: "header:Authorization",
        ErrorHandler: func(c echo.Context, err error) error {
            if err != nil {
                return c.JSON(400, "custom error")
            }
            return nil
        },
    })

Lösung

Hier sind die Schritte, denen Sie folgen können:

  1. Token-Prüfung ohne Verwendung des Schlüsselworts „Bearer“: dafür Sie Sie können den Tokenlookup-Wert von „header:authorization“ in ändern „Abfrage: Token“. Dadurch können Sie das Token als Abfrage übergeben Parameter statt im Header.

  2. Benutzerdefinierte, der Situation entsprechende Fehlermeldungen zurückgeben Token nicht gefunden oder ungültig: Dies können Sie tun Fehlerbehandlungsfunktion ändern

Hier ist ein Beispiel:

output := echojwt.JWT(&echojwt.Config{
     SigningKey:  []byte(key.EnvSecretKey),
     TokenLookup: "query:token",
     ErrorHandler: func(c echo.Context, err error) error {
         if err == jwt.ErrTokenNotFound {
             return c.JSON(http.StatusBadRequest, "token not found")
         }
         if ve, ok := err.(*jwt.ValidationError); ok {
             if ve.Errors&jwt.ValidationErrorMalformed != 0 {
                 return c.JSON(http.StatusBadRequest, "token is malformed")
             } else if ve.Errors&(jwt.ValidationErrorExpired|jwt.ValidationErrorNotValidYet) != 0 {
                 return c.JSON(http.StatusUnauthorized, "token is expired or not valid yet")
             } else {
                 return c.JSON(http.StatusBadRequest, "token is invalid")
             }
         }
         return nil
     },
 })

Das obige ist der detaillierte Inhalt vonWarum funktioniert mein benutzerdefinierter Echo-JWT-Code nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen