Login no Discourse por token de cookie

Usamos o Discourse como nosso site da comunidade e temos um site oficial.
Portanto, esperamos que o Discourse possa ser logado automaticamente após o usuário fazer login em nosso site oficial.
Nosso site oficial adicionará um cookie quando o usuário fizer login e usamos o compartilhamento de cookies no Discourse. O Discourse obtém autorização no cookie e obtém informações do usuário para fazer login.
A implementação do código é a seguinte:

application_controller.rb
  before_action :check_cookie_login
  def check_cookie_login
    if !current_user && cookies[:authorization]
      external_id = get_external_id cookies[:authorization]
      cookie_log_on_user external_id
    end
  end
current_user.rb
 def cookie_log_on_user(external_id)
    sso_record = SingleSignOnRecord.find_by(external_id: external_id)
    user = sso_record.user
    log_on_user(user)
  end
defaul_current_user_provider.rb
 def log_off_user(session, cookie_jar)
    ……
   cookie_jar.delete('authorization')
 end

Gostaria de saber se há algo de errado em fazer isso? Existe uma maneira melhor?

Isso é inseguro. Um usuário poderia adulterar o cookie em seu navegador e fazer login como outra pessoa.

Você deve usar o DiscourseConnect em vez disso.

3 curtidas

Obrigado pela sua sugestão. Sou novato no Discourse. Se eu usar DiscourseConnect em vez disso, preciso de uma API web para retornar um nonce que o DiscourseConnect precisa?

1 curtida