-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Polina auth #2
Polina auth #2
Conversation
добавлены модели для передачи/получения при взаимодействии с фронтендом
изменено имя проекта, чтобы соответствовать гитхабу
+ added parsing and valifation to AuthRegisterPost // validation in reg.go + renamed project
- added common InitValidErrorInField - added login model - added common check
internal/auth/api/models/login.go
Outdated
|
||
passValid, err := lg.validatePassword() | ||
if err != nil || !passValid { | ||
return false, err |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
есть такой пакет - github.com/pkg/errors. С его помощью можно оборачивать ошибки в какой-то контекст, или создавать новые. и вот когда возвращаешь ошибки, лучше их заворачивать в какой-то контекст. здесь типа "failed to validate password". и обработать !passValid отдельно, потому что по сути это другая ошибка.
Есть две ручки - регистрации и авторизации. - регистрация - - регистрирует пользователя - проставляет токен в куки - возвращает 200, если ок, иначе - 400 - аутентификация - - аутентифицирует пользователя, - проставляет токен в куки - возвращает 200, если ок, иначе - 400 Также создана общая middleware, которая аутентифицирует пользователя по куки, - если все ок, передает бизнес модель пользователя в контекст, - иначе, возвращает 401 Также создана middleware - для логирования - для передачи структуры бизнес-логики Также создан общий модуль логирования
func main() { | ||
http.HandleFunc("/auth/", authHandler) | ||
// logger | ||
logger.New() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
если создавать логгер на старте каждого хендлера, ты туда сможешь передать информацию, специфичную для каждой ручки и запроса. и дописывать их как хочешь, без параметра в методе "op" или "req-id"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
там, так не очень сработает, только если опять через замыкания... ну и в структуру нужно будет хэндлеры перенести
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
вот у тебя handler начинает работать
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
там можно разместить создания логгера
internal/auth/api/login_post.go
Outdated
// достаем инфу по пользователю по username | ||
// создаем токен пользователя | ||
tokenString, errM := b.AuthoriseUser(l.Username, l.Password) | ||
if errM != nil { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
в независимости от того, почему произошла ошибка, мы возвращаем 400. Надо разделить ответы на 400 и 500, в зависимости от того, успешно ли мы обработали запрос или упали по своей причине
// создаем структуру токена claims | ||
claims := TokenClaims{ | ||
UserID: user.UserID, | ||
Username: user.Username, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
давай тут хранить только userID? по нему будешь получать юзера потом
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
для создания профиля из кук при первом запросе
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
расшифруй)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
юзер зарегистрировался -> его редиректит на страницу профиля
к профилю приходит запрос от браузера, чтобы дал инфу по профилю. но у нас профиль и ауф - разные сервисы с собственной бд. скорее всего, в будущем, ауф - своя бд, профиль - ходит в общую, но это обсуждаемо.
ну и получается, что профиль не знает о регистрации пользователя. но ему приходит валидный токен в куки и он парсит оттуда инфу о пользователе и создает у себя в бдшке новый профиль под него
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
профиль где-то возьмет данные сам, ему не нужно их подсовывать. Он сделает это или в соседнем сервисе, или соседний сервис будет приходить и класть профилю в бд эту информацию, откуда потом сам профиль будет брать инфу. Сейчас в любом случае профиль должен брать информацию из абстрактного репозитория, а что там будет - еще порешаем
|
||
// Сериализуем модель в JSON и отправляем в ответ | ||
json.NewEncoder(w).Encode(model) | ||
logger.StandardSendModel(model.String(), op) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
мне кажется, если ты хочешь логировать вход и выход ручки, лучше использовать middleware
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
а есть миддллваре на выход?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
там вроде можно сделать next.serve в коде миддлваре и после этого еще код писать
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Справедливо
модуль buisness с опечаткой назван |
- создана структура хэндлеров - behavior перенес в инит этой структуры - переименован модуль business
многое порешали в личке в тг, пока в таком виде вливаем |
Сервис регистрации.
На данный момент: