So ändern Sie Benutzerfelder mit der API

(Bearbeitung: Siehe den 2. Beitrag für die Lösung: Wie man Benutzerfelder mit der API ändert)

@sam, du hast (in einem Beitrag in einem jetzt geschlossenen Thema) bezüglich jemandem, der die API nutzen wollte, um ein benutzerdefiniertes Feld in einem Benutzerdatensatz zu aktualisieren, Folgendes erwähnt: „Das Feld muss freigegeben (whitelisted) werden. Kannst du es zu /admin/customize/user_fields hinzufügen, oder soll dieses Feld den Benutzern vollständig verborgen bleiben?"

Zwei kurze Fragen:

  1. Was ist der Endpunkt /admin/customize/?
  2. Wie „freigibt" (whitelisted) man ein Feld? (Was bedeutet das – es für den API-Zugriff freigeben, auf irgendeine Weise?!)

Ich habe erfolglos nach Antworten auf beide Fragen gesucht. Hoffentlich kannst du (oder jemand anderes, der es weiß) helfen.

BTW: Mein eigentliches Ziel scheint einfach zu sein: Ich möchte in der Lage sein, den Wert eines benutzerdefinierten Benutzerfelds über die API zu setzen und abzurufen. Doch ich stelle fest, dass es unglaublich schwierig ist, eine klare Antwort darauf zu bekommen, wie das geht. :frowning:

Bisher habe ich Folgendes herausgefunden:

  1. Man kann benutzerdefinierte Felder sozusagen über SSO übergeben, aber das ist nicht die API.
  2. Die benutzerdefinierten Felder scheinen bei Aufrufen der API durch das Frontend (durch Beobachten der XHR-Anfrage) nur durch eine Nummer und nicht durch einen Namen referenziert zu werden – das macht natürlich einen großen Unterschied, wenn ich sie nach Namen suche, sie aber tatsächlich als users[2] existieren.

Wie du siehst, ist es nicht offensichtlich :wink: und ich gehe davon aus, dass das „Abrufen" (get) einfacher ist, da es Teil des Benutzerdatensatzes sein wird (den ich jetzt bereits mit der API abrufen kann), aber ich kann das erst bestätigen, wenn ich es mit der API „setzen" (set) kann.

Wie auch immer … sobald ich das endlich herausgefunden habe, wie kann ich dieses Wissen so weitergeben, dass es der nächsten Person hilft, die versucht, dies zu tun?

2 „Gefällt mir“

Sie können einen Benutzer mit benutzerdefinierten Feldern über die API erstellen, indem Sie user_fields[1] wie folgt übergeben:

curl -i -sS -X POST "http://localhost:3000/users"  \
-H "Content-Type: multipart/form-data;"  \
-H "Api-Key: d19b5a38ed13745f4c5..."  \
-H "Api-Username: system"  \
-F "name=cbbc7188c201b59ebc06"  \
-F "username=cbbc7188c201b59ebc06"  \
-F "email=cbbc7188c201b59ebc06@example.com"  \
-F "password=b6629ed30b4bc3de32ce452d171540b0"  \
-F "active=true"  \
-F "approved=true"  \
-F "user_fields[1]=a874d830b60"  \
-F "user_fields[2]=732418b131b"

Sie können sie auch aktualisieren, indem Sie eine PUT-Anfrage an /u/<username>.json senden.

7 „Gefällt mir“

/admin/customize/user_fields ist eine Benutzeroberfläche, auf der benutzerdefinierte Benutzerfelder konfiguriert werden.

3 „Gefällt mir“

Vielen Dank für all diese Hilfe! Nur am Rande: Ich würde es begrüßen, wenn man auf user_fields über ihren Namen zugreifen könnte (das scheint viel weniger fehleranfällig zu sein), aber diese Erklärung und die Informationen, die du mir gegeben hast, sind enorm hilfreich. Ich danke dir dafür :slight_smile:

1 „Gefällt mir“

Verwenden Sie denselben POST-Endpunkt, um einen Benutzer zu aktualisieren? Sind alle Felder erforderlich?

2 „Gefällt mir“

Hallo! Ich möchte wissen, wie ich den Index von user_fields erhalte. Soll ich zum Web-Controller gehen und den Index abrufen? Gibt es eine API, um die user_fields zu erhalten? Dann könnte ich den Index bekommen. Danke.

1 „Gefällt mir“

Sie können eine GET-Anfrage an /admin/customize/user_fields stellen, und es wird eine Liste von Benutzerfeldern zurückgegeben:

{
  "user_fields": [
    {
      "id": 2,
      "name": "Bevorzugtes Betriebssystem",
      "description": "Was ist Ihr bevorzugtes Betriebssystem?",
      "field_type": "text",
      "editable": true,
      "required": false,
      "show_on_profile": true,
      "show_on_user_card": true,
      "searchable": false,
      "position": 1
    }
  ]
}
5 „Gefällt mir“

Danke. Ihre Antwort ist sehr hilfreich für mich!

2 „Gefällt mir“