OAuth перенаправляет на /login после успешного JSON-запроса к пользователю

Моя конфигурация OAuth Basic ведёт себя довольно странно. Изначально при настройке возникло несколько ошибок, которые я исправил. Однако теперь я вижу, что процесс идёт по следующему пути: Discourse → Cognito Authorize Endpoint → Discourse Callback → Discourse /login. В логах нет предупреждений или ошибок, и при их проверке видно, что успешно выполнен JSON-запрос для получения данных пользователя.

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

Ниже приведены логи.

Отладка OAuth2: ответ after_authenticate, учётные данные: {"token" => "eyJraWQiOiJ3YW8zbVBRWmh2Z2F6YldNaU5jS3ZOdVdRMXRmcm1ya2ZVZ2RvVjVYSG1RPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJkNzhkZDliNS03Mjc2LTQ5OWEtYjdiN
19:48
Отладка OAuth2: URL для получения данных пользователя (user_json_url): GET https://api.lifebac.com/token/details?token=eyJraWQiOiJ3YW8zbVBRWmh2Z2F6YldNaU5jS3ZOdVdRMXRmcm1ya2ZVZ2RvVjVYSG1RPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJkNzhkZDliNS03Mjc
19:48
Отладка OAuth2: ответ от сервера с данными пользователя (user_json_response): #<Excon::Response:0x00007f36a7608a30 @data={:body=>"{\"id\":\"d78dd9b5-7276-499a-b7b6-02da38e03ce9\", ...}", :cookies=>[], :host=>"api.lifebac.com", :headers=>{"Conten
19:48
Отладка OAuth2: данные пользователя (user_json): {"id" => "d78dd9b5-7276-499a-b7b6-02da38e03ce9", ...}

Буду крайне признателен за любую помощь в выяснении причин происходящего. При необходимости с радостью предоставлю трассировки стека вызовов.

Перенаправление является нормальным, но также должно появляться всплывающее окно регистрации. Вы его видите?

Учетная запись пользователя создается только после того, как пользователь подтвердит данные учетной записи и нажмет «Создать».

Привет, Дэвид,

К сожалению, эта информация не отображается, и без ввода всех данных пользователя подтвердить ничего нельзя.

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

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

Какие значения у ваших настроек oauth2? Возьмём для примера oauth2_json_email_path.

Также, не могли бы вы предоставить полную строку “user_json” из лога, чтобы мы могли увидеть все ключи? (электронные адреса можно скрыть)

Полные данные были:

{"id"=>"d78dd9b5-7276-499a-b7b6-02da38e03ce9", "username"=>"patrick2"}

а значениями полей для соответствующих полей были «id» и «username».

В настоящее время я обновляю конечную точку, чтобы добавить email и имя, но у меня сложилось впечатление, что требовались только id и username.

Спасибо,

Патрик

Минимальные данные для подключения учётной записи к учётной записи Discourse — это только id. Однако Discourse требует имя пользователя и адрес электронной почты. Именно поэтому мы открываем модальное окно регистрации.

Если вы сможете добавить эту информацию в OAuth API, это значительно упростит процесс для ваших пользователей :+1:

Да, сейчас этим занимаюсь! Обновлю конечную точку, чтобы включить туда также электронную почту, и посмотрю, решит ли это проблему.

Но в таком случае, surely, имя пользователя хотя бы должно передаваться на страницу регистрации?

Спасибо,

Патрик

Да, должно. Вы настроили oauth2_json_username_path как username?

@david, спасибо, друг! Всё работает с данными.

Как правильно запросить флаг для автоматического подтверждения пользователей OAuth?

Спасибо,
Патрик

Что вы имеете в виду под автоматическим подтверждением? Пропустить подтверждение по электронной почте? Или пропустить модальное окно регистрации?

Первое уже возможно. Второе мы планируем реализовать в ближайшее время.

Отлично! Я имел в виду второй! Но если он уже у вас на карандаше, то всё в порядке!

Поддерживается ли новый параметр external_auth_skip_create_confirm из Automatically provision accounts with external SSO provider? (skip Create New Account prompt) - #6 by david в OAuth2?

Конечно! Это поддерживается всеми провайдерами аутентификации Discourse (включая Facebook, Github, Google и др.) :smiley: