Discourse как провайдер идентификации не работает в localhost

Я настроил Discourse локально. Теперь я пытаюсь использовать Discourse в качестве провайдера идентификации. Я следовал этому руководству:

но получаю ошибку:

GET http://localhost:3000/session/sso_provider?sso=bm9uY2U9MWc3NlQyaHRVZTZTYzJENjVEbzlzUT09JnJldHVybl9zc29fdXJsPWh0dHA6Ly9sb2NhbGhvc3Q6ODA4MS9yZWRpcmVjdA%3D%3D&sig=abcdb4a453080b7bac871d1d8d660bc731cfbc2a26fc6013f19a848c0018461c 422 (Unprocessable Entity)

Примечание: мой клиент, делающий запрос, находится на localhost, и сервер Discourse также работает на localhost.
Я пытался найти похожие вопросы в интернете, но не смог найти никакой помощи. Также публикую свой код на Node.js для справки:

app.get('/login', (req, res) => {
  let nonce = crypto.randomBytes(16).toString('base64');
  const payload = `nonce=${nonce}&return_sso_url=http://localhost:8081/redirect`
  const base64 = Buffer.from(payload).toString('base64')
  const URL_ENCODED_PAYLOAD = encodeURIComponent(base64)
  let hmac = crypto.createHmac('sha256', 'myrandomstring')
  hmac.update(URL_ENCODED_PAYLOAD)
  let HEX_SIGNATURE = hmac.digest('hex').toLowerCase()
  res.redirect(`http://localhost:3000/session/sso_provider?sso=${URL_ENCODED_PAYLOAD}&sig=${HEX_SIGNATURE}`)
})

Может ли кто-нибудь помочь мне понять, почему это не работает? Спасибо

Я почти уверен, что это требует https, что не работает на локальном хосте.

@pfaffman У меня всё работает на localhost. Оказалось, это была моя ошибка. Но теперь я столкнулся с проблемой: когда меня перенаправляют на страницу Discourse, я ввожу имя пользователя и пароль, нажимаю «Войти», но обратно на мой сайт меня не перенаправляют. Я прочитал похожий пост здесь: Discourse doesn't redirect to return_sso_url after user logs in on private site - #4 by simon, но там эта проблема была решена для социального входа (наверное, не для аутентификации по имени пользователя и паролю). Можете ли вы помочь мне с этим? Спасибо.