Getting user profile custom field via JS

Hi,

I’m wondering if it is possible to retrieve user profile custom fields in our customized header using something like this:

$.ajax("/session/current").then(function (json) { 
    console.log(json.custom.user_field_4);
}

What would be the correct syntax?
Thanks!

1 curtida

You want something like

$.ajax("/session/current").then(function(result) {
  console.log(result.current_user.custom_fields);
});
2 curtidas

Thanks, how do I get to the attribute?
console.log(result.current_user.custom_fields); yields an object,
i also tried:
result.current_user.custom_fields.my_field_name
and
result.current_user.custom_fields.user_field_4
they all return “undefined”

2 curtidas

You will need to whitelist the custom fields you want using the “public_user_custom_fields” site setting.

3 curtidas

got it thanks! :smile:

3 curtidas

Is this still accurate? I’ve added pro_expires_at as a custom field on my user (User.find('nuck').tap { |u| u.custom_fields['pro_expires_at'] = 5.weeks.from_now.to_i }.save) and stuffed that into public_user_custom_fields in the site settings panel, but I’m just not seeing it in the preload data?

2 curtidas

It definitely should still be working. We haven’t removed it and some plugins rely on it to work.

What preload info are you looking at? Viewing a user’s profile?

currentUser and the custom_user_fields attribute that the PostSerializer says should be present on serialized Post objects

It should definitely work if it’s public_user_custom_fields – I know we’re using this feature on some plugins and the data is indeed being displayed properly. Maybe try restarting your dev server? Does it appear in the JSON request?

2 curtidas

If you want a custom_user_field on the post object you can do this:

https://github.com/xfalcox/discourse-signatures/blob/1ff4e7e1d57eed825febdbd58980a73bef03cb6b/plugin.rb#L19

1 curtida

public_user_custom_fields in the admin panel, right? Not some setting elsewhere?

I was actually developing against our staging server which rebuilds the docker every time so I’m certain it was restarted (and then some). I’ll look at the JSON request this weekend and see if I can pin this down.

Wouldn’t this cause an N+1 query? Is there any solid documentation on the whole custom field system somewhere? I didn’t realize you could register the custom field type or append to serialized_current_user_fields

I don’t think so, because the serializer already has the user object, is just a matter of including it in the payload. I can be wrong, tough.

Nope, but there are plenty of opensource plugins and the Discourse source code itself.

I found it trough other plugins code too.

Right, public_user_custom_fields in the admin panel. Those fields should end up in the JSON request. I’d double check there. Without a development environment your life is going to be a lot harder, as the next step would be to go into the code and add Rails.logger.info to try and figure out why those fields are not being passed through when they should.

1 curtida

Por algum motivo, não consigo ver os campos de usuário personalizados no console que adicionei na seção Admin > Personalizar > Campos de Usuário.

Coloquei o seguinte em um plugin:

<script type="text/discourse-plugin" version="0.8.42">
   const user = api.getCurrentUser();
   console.log(user);
</script>

Quando olho para o objeto do usuário, vejo um objeto em branco na entrada custom_fields. Quando mudo para console.log(user.custom_fields); ele ainda mostra um objeto em branco.

O usuário atual tem três campos personalizados preenchidos, adicionei todas as três chaves desses campos, no formato de test_topic para campos de usuário público e campos de usuário da equipe e, no entanto, o objeto ainda aparece vazio no console.

Perguntei ao ChatGPT (lol) e ele não parece estar me ajudando.

Alguma sugestão sobre o que pode estar acontecendo?

ATUALIZAÇÃO: Acho que um problema foi que eu estava usando custom_fields e agora parece estar sob o rótulo user_fields, conforme isto:

No entanto, parece que ele apenas me mostra o valor do campo de usuário personalizado e um número para a chave, em vez da chave personalizada que inseri em Admin > Personalizar > Campos de Usuário.

1 curtida

Este componente de tema pode ser de interesse, dependendo do que você procura fazer com o campo do usuário.

Este adiciona a ocultação de postagens com um tipo de palavras vigiadas pelo usuário.

Visualizar o código-fonte pode dar ideias.

1 curtida

Estou principalmente tentando criar um pequeno componente de tema que garantirá que os campos de usuário personalizados que adiciono em admin > personalizar > campos de usuário sejam:

  1. Adicionados ao i18n traduzível para que eu possa personalizar o texto deles na seção admin > personalizar > texto
  2. Adicionados como chaves de interpolação para que eu possa usá-los como %{chave} na seção admin > personalizar > texto

Basicamente, estou tentando resolver meu próprio problema que postei aqui:
https://meta.discourse.org/t/create-and-configure-custom-user-fields/113192/55

Mas não consegui passar da primeira parte, que é apenas obter a combinação chave/valor dos campos de usuário no objeto do usuário.

Vou dar uma olhada no que você adicionou, obrigado!

1 curtida

Ainda sou muito novo e estou aprendendo as coisas conforme avanço. Não posso dizer com certeza, mas se para traduções de idiomas existem 2 plugins que fazem traduções.

E

Peço desculpas se entendi mal o que você está tentando realizar, caso esteja incorreto.

1 curtida