Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa kod tersuai echo jwt saya tidak berfungsi?

Mengapa kod tersuai echo jwt saya tidak berfungsi?

WBOY
WBOYke hadapan
2024-02-08 22:50:341153semak imbas

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

editor php Yuzai sering menerima soalan daripada pembaca, antara soalan biasa ialah tentang "Kenapa kod tersuai jwt gema saya tidak berfungsi?". Apabila menggunakan JWT (JSON Web Token), kadangkala kami menghadapi situasi di mana kod tersuai tidak berfungsi Ini mungkin disebabkan oleh beberapa masalah biasa. Dalam artikel ini, kami akan menjawab soalan ini secara terperinci dan menyediakan penyelesaian untuk membantu pembaca menyelesaikan masalah yang mengganggu mereka. Mari lihat!

Kandungan soalan

Saya menggunakan echo jwt untuk mengesahkan pengguna, saya menyesuaikannya sambil melihat manual tetapi ia tidak digunakan. Saya mahu dua perkara.

  1. Saya ingin melakukan semakan token tanpa kata kunci pembawa

  2. Saya ingin mengembalikan mesej ralat yang sesuai untuk kes di mana token tidak ditemui atau token tidak sah.

Bagaimana untuk mengubah suai kod di atas untuk mencapai kesan yang saya inginkan?

Saya baru mula belajar golang, sebarang nasihat amatlah dihargai

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
        },
    })

Penyelesaian

Berikut adalah langkah-langkah yang boleh anda ikuti:

  1. Semakan token tanpa menggunakan kata kunci "pembawa": untuk ini anda Anda boleh menukar nilai tokenlookup daripada "header:authorization" kepada "pertanyaan: token". Ini akan membolehkan anda menghantar token sebagai pertanyaan parameter dan bukannya dalam pengepala.

  2. Kembalikan mesej ralat tersuai yang sesuai dengan situasi Token tidak ditemui atau tidak sah: Untuk melakukan ini, anda boleh Ubah suai fungsi pengendalian ralat

Berikut adalah contoh:

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
     },
 })

Atas ialah kandungan terperinci Mengapa kod tersuai echo jwt saya tidak berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam