Como definir o idioma para usuários SSO

Como posso definir o idioma para um usuário logado usando SSO? Tentei usar a chave “locale” se o usuário estiver acessando pela primeira vez, mas não funcionou. Acredito que a chave “locale” funcione se o usuário for anônimo.

Olá @Ankur_Tyagi :wave:t2: bem-vindo à Meta :slight_smile:

Esta postagem deve ajudar. existem dois parâmetros que você precisa.

1 curtida

Para um usuário novo que nunca fez login no Discourse antes, deve funcionar se o parâmetro locale for definido na carga útil na primeira vez que o usuário fizer login no site. Por exemplo, usando a documentação do npm que você vinculou:

var userparams = {
	// Obrigatório, caso contrário, lançará uma exceção
	"nonce": nonce,
	"external_id": "algum id de usuário aqui",
	"email": "algum email de usuário",
	// Opcional
	"username": "algum nome de usuário",
	"name": "algum nome real",
    "locale": "es"
};

Para um usuário existente que já possui uma conta no Discourse, você precisará adicionar o parâmetro locale_force_update a userparams e defini-lo como true. Acho que, no seu caso, você pode incluir o parâmetro locale_force_update tanto ao criar um novo usuário quanto ao atualizar um usuário:

var userparams = {
	// Obrigatório, caso contrário, lançará uma exceção
	"nonce": nonce,
	"external_id": "algum id de usuário aqui",
	"email": "algum email de usuário",
	// Opcional
	"username": "algum nome de usuário",
	"name": "algum nome real",
    "locale": "es",
    "locale_force_update": true
};

Infelizmente, para atualizar o local, ou quaisquer outros atributos por meio da carga útil do DiscourseConnect, o usuário terá que sair do Discourse e, em seguida, fazer login novamente. Isso significa que é improvável que o usuário obtenha o local atualizado imediatamente. Existe uma solução alternativa para isso, mas acho que não é tratada pelo pacote npm discourse-sso. Para atualizar um usuário via DiscourseConnect sem exigir que ele saia e faça login novamente no Discourse, você precisa fazer uma chamada para a rota sync_sso. Os detalhes sobre isso estão aqui: Sync DiscourseConnect user data with the sync_sso route.

Se você estiver com problemas para definir o local corretamente para novos usuários, ou para usuários que saem e fazem login novamente após adicionar os parâmetros de local, tente habilitar a configuração do site Discourse verbose discourse connect logging. Isso permitirá que você veja os parâmetros que estão sendo enviados para o Discourse a partir da página /logs do seu site (encontrada em Admin / Logs / Error Logs.)

2 curtidas

Olá @Lilly

Obrigado pela sua resposta.
Tentei com um novo usuário, bem como atualizando o locale para um usuário existente, mas não funcionou. Acho que só funciona para o caso de usuários anônimos. Estou procurando uma solução para usuários logados.

Seria útil se você pudesse revisar os detalhes da configuração abaixo, talvez haja algo que eu precise atualizar para corrigir, não tenho certeza.

  1. Versão do fórum Discourse: Discourse 3.2.0.beta1-dev
  2. Pacote JS usado para sso: discourse-sso (versão: 1.0.5)
  3. Link do pacote Discourse: discourse-sso - npm

Olá @Ankur_Tyagi, sinto muito que você ainda esteja tendo problemas. Você revisou o conselho de Simon usando o parâmetro locale_force_update? Acho que tudo o que sei sobre SSO é do @simon :slight_smile:

Eu revisaria cuidadosamente as informações que @simon postou, bem como o Guia Oficial do DiscourseConnect SSO que foi vinculado.

A configuração de logging detalhado do discourse connect e os logs podem ajudá-lo a solucionar isso:

1 curtida

Obrigado @Lilly, vou tentar esta solução