Илья
так это персонализация
Илья
выбирай что хочешь
Shohrukh
Tony
go mod init делал?
module myproject go 1.17 require github.com/julienschmidt/httprouter v1.3.0 require github.com/mattn/go-sqlite3 v1.14.12 require github.com/dgrijalva/jwt-go v3.2.0+incompatible require github.com/joho/godotenv v1.4.0 // indirect
Илья
а, вс код, тогда не знаю
Tony
ты через go run запускаешь?
нет, использую launch "version": "0.2.0", "configurations": [ { "name": "Launch Package", "type": "go", "request": "launch", "mode": "auto", "program": "${workspaceFolder}/cmd/main" } ]
fenogentov
go run ./...
Tony
возможно в этом причина
поведение не изменилось
Tony
Ладно, пусть хоть так работает
Илья
поведение не изменилось
ну в интелиджи нужно ставить запуск из директории
Tony
Не могу разобраться с парсером токена, почему-то возвращает ошибку token, err := jwt.Parse(r.Header["Token"][0], func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("There was an error") }
Tony
т.е. err !=nil
Tony
текст ошибки при этом: key is of invalid type
Anonymous
такая ошибка при создании токена
Anonymous
token.SignedString([]byte(jwtKey)) попробуй так
Tony
token.SignedString([]byte(jwtKey)) попробуй так
//Генерация токена func GenerateToken(SecretString string) (token string, err error) { //Секретная строка подписи токена SignedString := []byte(SecretString) //Инициализация перменной типа токен tkn := jwt.New(jwt.SigningMethodHS256) //Генерация строки токена tokenString, err := tkn.SignedString(SignedString) if err != nil { log.Printf("Ошибка генерации токена: " + err.Error()) } return tokenString, err }
Tony
Вроде так и делаю
Tony
Только при парсинге не надо ли тоже использовать секретную строку?
Tony
И jwt.SigningMethodHS256 - это норм?
Tony
Кажется методы разные
Anonymous
у тебя сигнатуры разные
Anonymous
первый кейс HMAC
Anonymous
второй HS256
Anonymous
поэтому и ошибка
Anonymous
я имею ввиду, что при парсинге метод другой
Tony
а почему-то не удается выбрать один
Tony
tkn := jwt.New(jwt.SigningMethodHS256) - здесь нет SigningMethodHMAC а при парсинге token.Method.(*jwt.SigningMethodHMAC) - здесь нет SigningMethodHS256 видимо из-за того, что *jwt.SigningMethodHMAC - это ссылка?
Tony
Ответ где-то близко :)
Tony
token.Method.(*jwt.SigningMethodHMAC) - и какая-то странная конструкция :) точка перед скобкой
Anonymous
попробуй токен создавать через HMAC
Anonymous
будет ошибка или нет?
Tony
Все дело в корневом каталоге, из которого ты запускаешь программу, все относительные пути будут считаться от него
Так почему функция проверки наличия файла и загрузки env файла считают это по-разному при одном запуске?
Grigory
Так почему функция проверки наличия файла и загрузки env файла считают это по-разному при одном запуске?
Оу, это вообще чёт странное, ты ищешь другой файл, не тот что пытаешься загрузить
Grigory
Точка в начале не так работает
Grigory
Она должна быть ./main.env
Tony
Она должна быть ./main.env
тоже так думал, но не работает так
Tony
Покажи ls -la
go run main.go ls -sa Так?
Konstantin
Всем привет! Подскажите плиз, есть сервисы где можно хранить env?
Grigory
go run main.go ls -sa Так?
В терминале введи ls -la
Tony
😕
Tony
Windows 11
Grigory
Оу
Victor
😕
WSL в помощь :)
Илья
😕
dir)))
Anonymous
Всем привет! Подскажите плиз, есть сервисы где можно хранить env?
Это как так? Зачем их хранить на стороне? Это же файл с секретами
Konstantin
А нужны на разных машинах
Konstantin
Да и делиться иногда
Alexandr🇷🇺
dir)))
Просто ls, он все выведет
Alexandr🇷🇺
😕
Просто ls
Konstantin
Не обязательно env, конфиги всякие
Anonymous
А нужны на разных машинах
Hashicorp Vault вам в помощь!
Konstantin
Tony
Просто ls
так работает 😊
Tony
//Генерация токена func GenerateToken(SecretString string) (token string, err error) { //Секретная строка подписи токена SignedString := []byte(SecretString) //Инициализация перменной типа токен tkn := jwt.New(jwt.SigningMethodHS256) //Генерация строки токена tokenString, err := tkn.SignedString(SignedString) if err != nil { log.Printf("Ошибка генерации токена: " + err.Error()) } return tokenString, err }
А вообще токен нужно проверять на валидность или просто при выдаче писать в БД пользователю, а при след запросах сверять ? Или луче все-таки в клаймс писать id юзера и получать его при парсинге токена? Как правильно?
Tony
такая ошибка при создании токена
Разобрался, косяк был в том, что при парсинге я кормил его секретным ключом в виде String без преобразования в byte
Artur
Третья часть разработки production платформы e-commerce на Golang. Теперь все задачи для подписчиков оформлены в виде Issue на GitHub. Вся информация в ролике и в описании. Приятного просмотра! https://youtu.be/JYvWu-7vKY8
Talon(招技术)
Urgent Hiring A well-known gambling software company in Philippines, DDU is looking to bring on multiple Golang Engineer and Frontend Developer to join their development team – ideally, they’re looking for an Engineer to has solid Back End experience working with, or has the ability to learn, multiple languages.We have a Sports project to create,hope will see you soon. Note: This is onsite work. We offer single dormitory rooms. Telegram: @lgnokia741
Anton
@banofbot
Anonymous
https://play.golang.com/p/yjyMQVrVaZU
Grigory
дык потому что метод, который возвращает конкретный объект это не то же самое, что метод, который возвращает интерфейс
Valeriy
@reijo1337 Есть правило, при котором ты возвращаешь структуру, а в зависимости указываешь интерфейс
Максим
@banofbot
Alexander
может быть через 2 дня смогу ответитть, если не забуду
Valeriy
Суть в том, что ты в зависимостях указываешь интерфейс, а реализации могут быть разные, они могут меняться и тд. Почитай про SOLID, вот особенно что такое D. Или тебе не нравится именно утиная типизация? Прости, я не знаю твой бэкграунд и сложно понять что именно ты имеешь ввиду.
Herman
Ага, я сегодня 10 минут такси вызывал
Herman
То едет, то не едет
Ron Mount
MRpl
Всем доброго времени суток. Сам никогда не писал на Go, потому, если такое возможно и кому-то не лень, попрошу написать самый простой сервер, чтобы в случае, когда я заходил на него,например, на 80 порт, видел ip адрес, если он в докере, то хэш контейнера. Спасибо, не кидайтесь помидорами.
Maks
У тебя получится