Skip to content
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

Merged
merged 35 commits into from
Oct 1, 2024
Merged

Polina auth #2

merged 35 commits into from
Oct 1, 2024

Conversation

PtFux
Copy link
Collaborator

@PtFux PtFux commented Sep 23, 2024

Сервис регистрации.
На данный момент:

  • работают обе ручки
  • работает мидлваре аутентификации

PtFux and others added 16 commits September 22, 2024 22:29
добавлены модели для передачи/получения при взаимодействии с фронтендом
изменено имя проекта, чтобы соответствовать гитхабу
+ added parsing and valifation to AuthRegisterPost // validation in reg.go
+ renamed project
- added common InitValidErrorInField
- added login model
- added common check
go.mod Outdated Show resolved Hide resolved

passValid, err := lg.validatePassword()
if err != nil || !passValid {
return false, err
Copy link
Collaborator

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()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

если создавать логгер на старте каждого хендлера, ты туда сможешь передать информацию, специфичную для каждой ручки и запроса. и дописывать их как хочешь, без параметра в методе "op" или "req-id"

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

там, так не очень сработает, только если опять через замыкания... ну и в структуру нужно будет хэндлеры перенести

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вот у тебя handler начинает работать

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

там можно разместить создания логгера

// достаем инфу по пользователю по username
// создаем токен пользователя
tokenString, errM := b.AuthoriseUser(l.Username, l.Password)
if errM != nil {
Copy link
Collaborator

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,
Copy link
Collaborator

@kanny4uHo kanny4uHo Sep 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

давай тут хранить только userID? по нему будешь получать юзера потом

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

для создания профиля из кук при первом запросе

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

расшифруй)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

юзер зарегистрировался -> его редиректит на страницу профиля

к профилю приходит запрос от браузера, чтобы дал инфу по профилю. но у нас профиль и ауф - разные сервисы с собственной бд. скорее всего, в будущем, ауф - своя бд, профиль - ходит в общую, но это обсуждаемо.

ну и получается, что профиль не знает о регистрации пользователя. но ему приходит валидный токен в куки и он парсит оттуда инфу о пользователе и создает у себя в бдшке новый профиль под него

Copy link
Collaborator

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)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

мне кажется, если ты хочешь логировать вход и выход ручки, лучше использовать middleware

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а есть миддллваре на выход?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

там вроде можно сделать  next.serve в коде миддлваре и после этого еще код писать

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Справедливо

@kanny4uHo
Copy link
Collaborator

модуль buisness с опечаткой назван

PtFux and others added 6 commits September 30, 2024 14:36
- создана структура хэндлеров
- behavior перенес в инит этой структуры
- переименован модуль business
@kanny4uHo
Copy link
Collaborator

многое порешали в личке в тг, пока в таком виде вливаем

@kanny4uHo kanny4uHo merged commit 961b4d8 into main Oct 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants