Авторизация на Golang

Доброго времени суток!

Столкнулся с проблемой авторизации на языке go enter image description here

Выше прикрепил, как записываются данные в базу

enter image description here

Попадаю в ошибку, то что неправильный пароль.

Решил сделать кастомный код

password := "123456"
hash := "$2a$10$nNLEbRWp6EMnPOrc2symbe2TvW2/1SR6fezhv41yyNYef/OWjTTuO"
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
if err != nil {
    fmt.Println(" Ошибка:", err)
} else {
    fmt.Println("работает правильно!")
}

Но все равно попадаю в if

Пробовал спрашивать в чатГПТ


Ответы (1 шт):

Автор решения: CrazyElf

Ну в общем нельзя байты в обычную строку переводить через string(hashedPassword), там теряется какая-то информация из-за непечатных символов, локализации и т.д. Используйте пакет hex для перевода в шестнадцатеричный вид и обратно, так ничего не потеряется:

package main

import (
    "encoding/hex"
    "fmt"
    "golang.org/x/crypto/bcrypt"
)

func main() {
    password := "123456"
    hash, err := hex.DecodeString("243261243130245a306a74595059775741736e4950696f6b354e72472e3058777578325a484d57774762334155352e47714935474b5a72644b466247")
    err = bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
    if err != nil {
        fmt.Println(" Ошибка:", err)
    } else {
        fmt.Println("работает правильно!")
    }

Вывод:

работает правильно!

Кодирование хэша в такую строку: hex.EncodeToString(hashedPassword)

→ Ссылка