Einladungs-Badges durch Selbsteinladung

Beschreibung und Beweise

Kürzlich in 2.9.0beta2 können Benutzer, die bereits ein Konto haben, auf Einladungslinks klicken. Aber ich habe Einladungslinks generiert, auf die ich klicken kann, und es wurde gesagt, dass ich mich selbst eingeladen habe, und weil ich TL2+ bin und auf 5 verschiedene Einladungslinks von mir geklickt habe, habe ich die Champion-Auszeichnung erhalten. Sie können unten einen Screenshot davon sehen. Diese befinden sich im Replit EDU-Forum und Sie können mein Profil hier einsehen.

Ich habe auch einen Einladungslink im Codecademy-Forum erstellt und es wird gesagt, dass ich mich dort auch selbst eingeladen habe, was Sie unten sehen können. Sehen Sie sich mein Profil hier an.

Schritte zur Reproduktion

Erreichen Sie TL2+ (standardmäßig), erstellen Sie Einladungslinks, auf die Sie dann klicken. Es wird gesagt, dass Sie sich selbst auf Ihrem Profil eingeladen haben und dass Sie Ihre Einladung angenommen haben, wie oben gezeigt. Und wenn Sie genügend Einladungslinks haben, erhalten Sie die Auszeichnungen Campaigner und Champion.

4 „Gefällt mir“

Funktioniert bei mir auch. Jetzt steht in meinem Profil, dass ich von mir selbst eingeladen wurde.

6 „Gefällt mir“

Und Sie sollten den Promoter-Badge erhalten. (Habe vergessen, ihn im ursprünglichen Beitrag zu erwähnen, da ich ihn bereits vor diesem hatte)

2 „Gefällt mir“

Danke, dass Sie darauf hingewiesen haben! Bei der Entwicklung dieser Funktion habe ich vergessen, wie ein Bösewicht zu denken. :supervillain:

@dan, haben Sie Gedanken dazu, wie dieses Problem behoben werden kann?

6 „Gefällt mir“

Ich habe mir persönlich nie den Code für Discourse angesehen, aber so etwas könnte funktionieren. (Das ist in JS, weil ich das am besten kann)

if (invter != invitee) {
  inviter_count++
}
3 „Gefällt mir“

Dieser Fehler wurde nun behoben. Nochmals vielen Dank an @not-ethan für die Meldung! Wenn Ihnen etwas am Einladungssystem auffällt, lassen Sie es uns bitte wissen. Wir arbeiten aktiv daran.

5 „Gefällt mir“

Wiedereröffnung, da ich eine PM von @not-ethan verloren habe. @dan, wenn es keine Umstände macht, würdest du mir bitte helfen?

Kann ich einen Link zum Commit oder PR für die Korrektur haben? Ich bin nur neugierig, was die Korrektur war.

5 „Gefällt mir“

@tobiaseigen @dan Ich glaube, ich habe den PR gefunden FIX: Do not increase invite count for current user by udan11 · Pull Request #15952 · discourse/discourse · GitHub

4 „Gefällt mir“

Auf Wunsch von @not-ethan wiedereröffnet. Gab es irgendwie eine Regression?

1 „Gefällt mir“

Nach weiteren Tests stelle ich fest, dass dies nur bei Replit Ask auftritt:


Aber nicht hier im Meta oder in einem anderen Forum, es wird nur angezeigt, dass Ethan deine Einladung angenommen hat, aber die Abzeichen werden nicht verliehen.

1 „Gefällt mir“

Schon gut, ich habe die Abzeichen hier in Meta und in dem anderen Forum erhalten. Es hat allerdings etwa 12 Stunden gedauert.

3 „Gefällt mir“

Kann bestätigen.

1 „Gefällt mir“

Hallo Leute,

es gibt einen Fehler, bei dem man einen Einladungscode erstellen und ihn selbst einlösen kann. Dadurch kann man die Einladungs-Badges erhalten, was ärgerlich ist. Dies wurde von @not-ethan erwähnt und ein Pull-Request wurde erstellt, aber der Fehler ist immer noch aktiv. Meine Idee war, wenn jemand einen Einladungscode für das Web verwendet, aber diese Person angemeldet ist, dass der Code fehlschlägt!

2 „Gefällt mir“

Vielen Dank, dass Sie das noch einmal zur Sprache bringen, Urias. Wir versuchen derzeit, das Einladungssystem nicht zu sehr zu verändern, da es komplex ist und Änderungen unbeabsichtigte und ungeplante Folgen haben können.

Gibt es eine Möglichkeit, dieses Problem zu umgehen, indem wir ändern, wie die Auszeichnung verliehen wird? Z. B. wenn die Person, die die Einladung einlöst, bereits Mitglied ist, wird die Auszeichnung für den Kampagnenmacher nicht an die Person verliehen, die die Einladung erstellt hat?

Dies scheint mir ein Problem zu sein, das wahrscheinlich schon lange besteht und unbemerkt geblieben ist. Eine andere Antwort wäre, dies als “nichts tun, funktioniert wie vorgesehen” zu behandeln und es den Community-Moderatoren zu überlassen, sich damit zu befassen, wenn sie Bedenken haben, dass Personen diese Methode missbrauchen, um mehr Auszeichnungen zu erhalten.

4 „Gefällt mir“

Meine SQL-Abfrage muss wahrscheinlich überprüft werden :slightly_smiling_face:, aber ich glaube, Sie könnten diese Zeile zur Badge-Abfrage hinzufügen, um zu verhindern, dass sie an Personen vergeben wird, die sich selbst eingeladen haben - AND i.invited_by_id <> u2.id

Also so etwas wie das hier:

SELECT u.id user_id, current_timestamp granted_at 
FROM users u 
WHERE u.id IN (
  SELECT invited_by_id 
  FROM invites i 
  JOIN invited_users iu ON iu.invite_id = i.id 
  JOIN users u2 ON u2.id = iu.user_id 
  WHERE i.deleted_at IS NULL
  AND i.invited_by_id <> u2.id
  AND u2.active 
  AND u2.trust_level >= 0 
  AND u2.silenced_till IS NULL 
  GROUP BY invited_by_id 
  HAVING COUNT(*) >= 1 
) AND u.active AND u.silenced_till IS NULL AND u.id > 0 AND
(:backfill OR u.id IN (:user_ids) ) 	
4 „Gefällt mir“

Cool! Ich habe eine Weile nicht mehr mit dem Abzeichensystem gespielt, aber wenn ich jetzt nachsehe, sehe ich die einladungsbezogenen Abzeichen nicht in der Admin-Abzeichen-Benutzeroberfläche. Vielleicht sind das Systemabzeichen, die im Discourse-Kern bearbeitet werden müssen?

2 „Gefällt mir“