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 Mi Piace

You want something like

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

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 Mi Piace

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

3 Mi Piace

got it thanks! :smile:

3 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

Per qualche motivo, non riesco a vedere i campi utente personalizzati nella console che ho aggiunto nella sezione Admin > Personalizza > Campi utente.

Ho inserito quanto segue in un plugin:

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

Quando guardo nell’oggetto utente, vedo un oggetto vuoto sotto la voce custom_fields. Quando lo cambio in console.log(user.custom_fields); mostra ancora un oggetto vuoto.

L’utente corrente ha tre campi personalizzati compilati, ho aggiunto tutte e tre le chiavi di campo, nel formato di test_topic a campi utente pubblici e campi utente staff e tuttavia l’oggetto appare ancora vuoto nella console.

Ho chiesto a ChatGPT (lol) e non sembra aiutarmi.

Qualsiasi suggerimento su cosa potrebbe succedere?

AGGIORNAMENTO: Penso che un problema fosse che stavo usando custom_fields e ora sembra essere sotto l’etichetta user_fields, come da questo:

Tuttavia, sembra che mi mostri solo il valore del campo utente personalizzato e un numero per la chiave, invece della chiave personalizzata che ho inserito in Admin > Personalizza > Campi utente.

1 Mi Piace

Questo componente del tema potrebbe essere di interesse a seconda di ciò che si desidera fare con il campo utente.

Questo aggiunge l’occultamento dei post con una sorta di parole monitorate dall’utente.

La visualizzazione del codice sorgente potrebbe fornire idee.

1 Mi Piace

Sto principalmente cercando di creare un piccolo componente tematico che assicuri che i campi utente personalizzati che aggiungo in admin > personalizza > campi utente siano:

  1. Aggiunti a i18n traducibili in modo da poter personalizzare il testo di essi nella sezione admin > personalizza > testo
  2. Aggiunti come chiavi di interpolazione in modo da poterli usare come %{chiave} nella sezione admin > personalizza > testo

Fondamentalmente sto cercando di risolvere il mio problema che ho postato qui:
https://meta.discourse.org/t/create-and-configure-custom-user-fields/113192/55

Ma non sono riuscito a superare la prima parte, ovvero ottenere la combinazione chiave/valore dai campi utente nell’oggetto utente.

Darò un’occhiata a quello che hai aggiunto, grazie!

1 Mi Piace

Sono ancora molto nuovo e sto imparando man mano. Non posso dirlo con certezza, ma se per le traduzioni linguistiche ci sono 2 plugin che fanno traduzioni.

E

Mi scuso se ho frainteso ciò che stai cercando di realizzare, se errato.

1 Mi Piace