Skip to content
This repository was archived by the owner on Jul 23, 2025. It is now read-only.

[#319] Add yandex authorisation#323

Merged
fey merged 96 commits into
Hexlet:mainfrom
Sanapol:add-yandex-authorisation-319
Jun 25, 2025
Merged

[#319] Add yandex authorisation#323
fey merged 96 commits into
Hexlet:mainfrom
Sanapol:add-yandex-authorisation-319

Conversation

@Sanapol

@Sanapol Sanapol commented Jun 2, 2025

Copy link
Copy Markdown
Contributor

No description provided.

@Sanapol

Sanapol commented Jun 2, 2025

Copy link
Copy Markdown
Contributor Author

привет, ПР готов, можно проверять
деплой: https://hexlet-correction-cnd1.onrender.com

Comment thread README.md Outdated
Comment thread README.md Outdated

@fey fey left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Тк у вас часть кода будет общей, имеет смысл довести ПРы до конца по очереди. Сперва #322 потом этот.

Comment thread src/main/java/io/hexlet/typoreporter/service/YandexOAuth2Service.java Outdated
Comment thread src/main/java/io/hexlet/typoreporter/service/AccountService.java Outdated
@fey fey linked an issue Jun 2, 2025 that may be closed by this pull request
@Sanapol

Sanapol commented Jun 2, 2025

Copy link
Copy Markdown
Contributor Author

@Sanapol
Sanapol marked this pull request as ready for review June 8, 2025 15:00
@Sanapol

Sanapol commented Jun 8, 2025

Copy link
Copy Markdown
Contributor Author

@fey привет, собрал сюда яндекс авторизацию и гитхаб

яндекс авторизация до сих пор не стабильно работает, я мучался 5 дней, я без понятия что с этим делать, это уже другая реализация авторизации и та же проблема :\

я перепробовал наверное уже все, менял куки, cors, отключал csrf, фильтры писал, не получилось только базу Redis для хранения данных сессии поднять.. но зачем она проекту, по сути она только для render и нужна была бы..

Сейчас это работает так
в первый раз авторизация происходит с 1-3 попытки, дальше она работает постоянно, но редирект может быть неправильный 50/50, может на login?error перенаправить, но авторизация будет успешна, а может отправить как надо в worcspace

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

все таки логика авторизации работает с github, и у yandex она сейчас аналогичная

@Sanapol

Sanapol commented Jun 8, 2025

Copy link
Copy Markdown
Contributor Author

вот деплой: https://hexlet-correction-2n6d.onrender.com

@fey

fey commented Jun 9, 2025

Copy link
Copy Markdown
Collaborator

@Sanapol потыкал кнопки, выглядит ок. В итоге тут получается две задачи в одной? Если да, то проси ребят в команде поревьювить (важно чтобы вы код друг у друга ревьювили, был в курсе изменений, предлагали их) + попроси тестировщика кейсы накинуть, потестить тоже.

И на будущее, было бы здорово, чтобы у пользователя в кабинете была кнопка привязки соц. сетей к аккаунту. Например как на Хекслете щас. Просто у меня например почта на яндексе одна, а в гитхабе другая. В итоге через яндекс создается новый аккаунт

Comment thread .env.example Outdated
Comment thread README.md Outdated
@Sanapol

Sanapol commented Jun 10, 2025

Copy link
Copy Markdown
Contributor Author

Сделал

@fey

fey commented Jun 10, 2025

Copy link
Copy Markdown
Collaborator

мб коммент не отправился. А для чего нужен custom service?

@Sanapol

Sanapol commented Jun 10, 2025

Copy link
Copy Markdown
Contributor Author

не понял вопроса, ты про CustomOAuth2UserService?
ну это главный класс с общей логикой авторизации всех запросов со сторонних сервисов, он возвращает уже авторизированного пользователя

public String getEmail() {
var email = attributes.get("email");
if (email == null) {
WebClient webClient = WebClient.builder()

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Здесь выполняются запросы сетевые, при этом, в яндексе этого нет. Может стоит вынести получение емейла в сервис?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Привет! А в Яндексе это нужно? Тут это применяется потому, что с Гитхаба может почта не приходить, если она там не указана как основная, поэтому нужно ее получать принудительно.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

в яндексе это не нужно, у меня все приходит в ответе

Comment thread src/main/java/io/hexlet/typoreporter/service/oauth2/OAuth2UserInfoFactory.java Outdated
Comment thread src/main/resources/messages_ru.properties Outdated
import java.util.Map;

@Getter
public class CustomOAuth2User extends DefaultOAuth2User {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

мне не нравится, что тут не совсем custom. Кастом предполагает переопределение поведение и тд. Но тут оно не совсем переопределяется. Это скорее обертка (это и service тоже).

При чем тут обертка сработает только для двух соц. сетей - для гитхаба и вероятно яндекса. Но разные провайдеры могут предоставлять разные поля для пользователей в качестве юзернейма idи так далее. Если появится VK, то как с ним это будет работать?

Т.е. для каждого провайдера/способа входа способ обработки и нормализации данных, метод там или класс

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Как будто бы в CustomOAuth2User нет смысла. YandexOAuth2UserInfo и гитхабовский возвращают username getUsername() уже.

    @Override
    public String getUsername() {
        return attributes.get("login").toString();
    }

может рассихрон произошел из-за того, что код параллельно писали.

@Sanapol Sanapol Jun 14, 2025

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Да, YandexOAuth2UserInfo и GithubOAuth2UserInfo возвращают username, но это лишь представление информации о пользователе в зависимости от сайта, изначальная возвращаемая сущность для всех реализаций DefaultOAuth2User, а у него изначально есть только 1 возвращаемое поле getName(), для того, чтобы на фронт отдать информацию о email и username был создан CustomOAuth2User, в который по сути было добавлено поле nickname, в остальном он такой же как DefaultOAuth2User

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

его убирать никак нельзя

@fey

fey commented Jun 11, 2025

Copy link
Copy Markdown
Collaborator

Итого

  1. CustomOAuth2User - выглядит так что можно убрать.
  2. Можно перенести доп запросы на получение емейла в сервис, но в Userinfo это выглядит лишним (тк это по сути dto).
  3. Можно спользовать Енамы (я там выше видел что яндекс добавили) в фабрику
  4. Я бы имя класса кастом сервис переименовал. Тк это класс, который отвечает за вход черзе соц. сети то его можно так и назвать - SocialAuthSerivce / OAuth2Service и так далее.
  5. а где тесты? :)

@Sanapol

Sanapol commented Jun 13, 2025

Copy link
Copy Markdown
Contributor Author

принято, а на счет тестов, еще пишем)

@Sanapol

Sanapol commented Jun 14, 2025

Copy link
Copy Markdown
Contributor Author

и того:

  1. не согласен, я еще перед его добавлением пытался написать без него, но в DefaultOAuth2User можно передать только 1 переменную, а нам нужны 2.
  2. это не я пишу, вопросы к @ean3ena, он пока не понимает зачем это делать
  3. сделал
  4. сделал
  5. пишу))

@Sanapol

Sanapol commented Jun 22, 2025

Copy link
Copy Markdown
Contributor Author

@fey я написал тесты... finally....

@fey

fey commented Jun 24, 2025

Copy link
Copy Markdown
Collaborator

А для гитхаба напишите тесты?

@Sanapol

Sanapol commented Jun 24, 2025

Copy link
Copy Markdown
Contributor Author

@ean3ena, на сколько я понял ты сам хочешь тесты для гитхаба написать или мне написать?

@ean3ena

ean3ena commented Jun 24, 2025

Copy link
Copy Markdown

Мы с Николаем обсуждали архитектуру, в итоге я ее переделал и сейчас пишу тесты. Потом новым ПР-ом отправлю изменения.

@Sanapol

Sanapol commented Jun 24, 2025

Copy link
Copy Markdown
Contributor Author

@fey Может тогда мержим пр?
чтобы я больше не собирал рефакторинг и тесты, а чтобы они пришли новым ПРом

@fey
fey merged commit 7634a94 into Hexlet:main Jun 25, 2025
1 check passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Development

Successfully merging this pull request may close these issues.

Авторизация через ID VK

3 participants