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 Like

You want something like

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

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 Likes

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

3 Likes

got it thanks! :smile:

3 Likes

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 Likes

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 Likes

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 Like

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 Like

For some reason, I can’t see the custom user fields in the console that I added in the Admin > Customize > User Fields section.

I’ve put the following in a plugin:

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

When I look in the user object, I see a blank object under the custom_fields entry. When I change it to console.log(user.custom_fields); it still shows a blank object.

The current user has three custom fields filled out, I’ve added all three of those field keys, in the format of test_topic to the public user custom fields and staff user custom fields and yet the object still appears empty in the console.

I’ve asked ChatGPT (lol) and it doesn’t seem to be helping me.

Any suggestions on what could be happening?

UPDATE: I think one problem was that I was using custom_fields and now it seems to be under the user_fields label, as per this:

However, it seems to just show me the value of the custom user field and a number for the key, instead of the custom key I entered in Admin > Customize > User Fields.

1 Like

This theme component might be of interest depending on what your looking to do with the user field.

This one adds hiding posts with a kind of user watched words.

viewing source may give ideas.

1 Like

I’m mostly just trying to create a small theme component that will make sure the custom user fields that I add in admin > customize > user fields are:

  1. Added to translatable i18n so I can customize the text of them in the admin > customize > text section
  2. Added as interpolation keys so I can use them as %{key} in the admin > customize > text section

Basically trying to solve my own problem I posted here:
https://meta.discourse.org/t/create-and-configure-custom-user-fields/113192/55

But I couldn’t get past the first part of just getting the key/value combination from the user fields in the user object.

I’ll take a look at what you’ve added, thank you!

1 Like

I am still very new and learning things as I go. I can’y say for sure but if for language translations there are 2 plugins that do translations.

And

I apologize if I have misunderstood what your working to accomplish if incorrect.

1 Like