Отключить постоянные запросы аутентификации при входе в Discord

Привет!

Я настроил вход через Discord на своей самодостаточной установке. Всё работает отлично… за исключением одной мелочи.

Когда пользователь входит через Discord, его каждый раз перенаправляет на страницу авторизации, то есть ему приходится подтверждать разрешение при каждом входе. Насколько я понимаю, это должно быть одноразовым действием при первом подключении входа через Discord к Discourse.

В любом случае, как это исправить? Я следовал документации.

3 лайка

У кого-нибудь возникла эта проблема?

2 лайка

Да, я попробовал на своём экземпляре и смог воспроизвести проблему.

2 лайка

Вы наблюдаете такое же поведение на других сайтах, предлагающих «Войти через Discord»? Если да, то это, скорее всего, ожидаемое поведение системы входа Discord, а не проблема, специфичная для Discourse.

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

Это связано с Discourse.

Можете ли вы предоставить публичный пример, чтобы мы могли его протестировать и сравнить реализацию?

Я не совсем понимаю, что вы имеете в виду под «публичным примером», извините.

Однако это не является нормой. Аутентификация в Discord должна требоваться только в первый раз.

Я имею в виду:

Можете ли вы поделиться ссылкой на один из них? Тогда мы сможем посмотреть, как они реализованы, и настроить Discourse соответствующим образом.

Вот форум, который я часто посещаю, но это не программное обеспечение Discourse.

https://famiboards.com/

1 лайк

Интересно, не связано ли это с отсутствием параметра prompt со значением none в URL авторизации?

prompt определяет, как процесс авторизации обрабатывает существующие авторизации. Если пользователь ранее авторизовал ваше приложение с запрошенными областями доступа, а параметр prompt установлен в consent, ему будет предложено повторно подтвердить авторизацию. Если установлено значение none, экран авторизации будет пропущен, и пользователь будет перенаправлен обратно на ваш URI перенаправления без запроса авторизации.

1 лайк

Кажется, вы на верном пути. Я нашел это:
https://community.auth0.com/t/discord-connection-prompts-for-consent-every-login/135157
Возможно, это можно исправить в самом Discourse? Насколько я знаю, в моей панели администратора или в портале разработчика Discord такой возможности нет.

2 лайка

В Discourse есть настройка запроса для Google Auth, и я считаю, что разумно добавить аналогичную настройку для Discord.

1 лайк

Я тоже это заметил.

Вы случайно не знаете, где в Discourse установлен файл для настройки входа? Думаю, можно добавить

"upstream_params": {
			"prompt": {
				"value": "none"
			}
		},

в этот файл и пересобрать систему, чтобы проверить, исправит ли это проблему.

Редакция: При более тщательном размышлении я понимаю, что не смогу найти файл, который позволил бы мне внедрить это изменение. Думаю, для того чтобы это работало как задумано, необходимо исправление со стороны разработчиков Discourse.

Так как у меня возникла проблема на моем экземпляре:

Да, ждём новостей от команды :+1:

1 лайк

Круто. Нужно ли мне что-то ещё сделать (кроме ожидания обновления)?

Я предполагаю, что точных сроков исправления в данном случае нет, и это, скорее всего, зависит от приоритета задачи. Это, наверное, лишь небольшое неудобство. Но было бы здорово, если бы это исправили!

Идея добавить prompt=none мне кажется хорошей. Если кто-то сможет написать код, протестировать его и создать pull request, это ускорит внесение изменений.

Релевантный файл — этот, но я пока точно не знаю, какие именно изменения потребуются.

2 лайка

Просматривая файл, я добавил

option :authorize_params, prompt: 'none'

под строкой

option :authorize_options, %i[scope permissions]

в своей самодостаточной установке.

Это отчасти работает…, но не так, как мы хотели.

Всё ещё перенаправляет на страницу авторизации Discord, однако пользователю больше не нужно нажимать «Разрешить». Страница перезагружается, после чего вы возвращаетесь на свою страницу Discourse.

Один шаг вперёд, один шаг назад. :melting_face:

Редактирование: Вижу, что @Arkshine и я протестировали изменение и получили тот же результат.

1 лайк

Я провёл быстрое тестирование (https://discourse.arkshine.dev/):

chrome_0lDMRNfXRz|видео

Страница аутентификации отображается, но происходит автоматическое перенаправление.

1 лайк

Даже с этим изменением вас всё равно перенаправляет на страницу аутентификации Discord, чего не должно происходить (хотя в этот раз вам не нужно вручную нажимать authenticate).

К сожалению, отправка PR с предложенным изменением не решит проблему.