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!
Saya menggunakan echo jwt untuk mengesahkan pengguna, saya menyesuaikannya sambil melihat manual tetapi ia tidak digunakan. Saya mahu dua perkara.
Saya ingin melakukan semakan token tanpa kata kunci pembawa
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 }, })
Berikut adalah langkah-langkah yang boleh anda ikuti:
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.
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!