Vollständigen Namen ausblenden, wenn nicht angemeldet

Hallo,

meine aktuelle Konfiguration ist so, dass Discourse auch für nicht eingeloggte Benutzer lesbar ist. Außerdem habe ich „Namen anzeigen" aktiviert, um den vollständigen Namen direkt neben dem Spitznamen zu sehen.

Was ich jedoch NICHT möchte, ist, dass nicht eingeloggte Benutzer den vollständigen Namen sehen können. Gibt es eine Möglichkeit, dies zu deaktivieren? Ich habe nichts dazu gefunden.

Vielen Dank im Voraus für deine Hilfe!

Is this possible with CSS @tshenry? I think we have the anon classes to do it?

I was going to respond to this earlier with some CSS, but remembered the case where username and display name match, resulting in the username being hidden.

In that situation it would present an avatar, with no name whatsoever.

But still better than get crawled by any bots :slight_smile: other forum software (plug-ins) hiding the full name and also anonymze the nick in e.g. to “user 34726”. Would be really perfect if I could hide at least the real name :slight_smile:

I’m going to look into this when I get a chance. It should be doable with a small theme component. I’ve got a decent amount on my plate, so it maybe be a little bit before I get back to you with anything.

Alright, the script for removing the full name for anons is fairly simple. Just create a new theme component and add the following to the Common </head> section:

<script type="text/discourse-plugin" version="0.8">
  api.reopenWidget("poster-name", {
    html(attrs) {
      let contents = this._super(attrs);
      if(contents.length == 2 && !api.getCurrentUser()) {
        return contents.shift();
      }
      return contents;
    }
  });
</script>

Some things to note:

  • To better avoid full names getting out, it would be best to set the site setting hide_user_profiles_from_public
  • This code assumes you have prioritize_username_in_ux enabled
  • A user’s full name will be used as the title attribute for a user avatar, so it will be displayed whenever someone hovers over an avatar. I haven’t found a solution for this yet, but I’ll come back if one is found.

Hope that helps :slightly_smiling_face:

Ist das jemals integriert worden?

Unsere Foren sollen öffentlich lesbar und von Suchmaschinen indexierbar sein, aber echte Namen sollen nur angezeigt werden, wenn man eingeloggt ist (damit die echten Namen der Nutzer nicht für Nicht-Mitglieder und Suchmaschinen sichtbar sind).

Ist das möglich? Ich habe den obigen Code ausprobiert, aber er hat nicht funktioniert.

Muss der obige Code aktualisiert werden, @tshenry?

Ich habe es gerade überprüft, und der Code funktioniert weiterhin. Alle von mir erwähnten Hinweise gelten nach wie vor.


Ich habe versucht, alle Bereiche zu finden, in denen der vollständige Name des Benutzers als Titelattribut seines Avatars verwendet wird. Der folgende Code sollte alle relevanten Bereiche abdecken, vorausgesetzt, Sie haben hide_user_profiles_from_public und prioritize_username_in_ux aktiviert. Leider erfordert dies das Überschreiben einiger Vorlagen, die jedoch nicht häufig geändert werden. Ich habe Links zu den Dateien auf GitHub eingefügt, falls Sie prüfen möchten, ob Sie den Code aktualisieren müssen. Die einzige Änderung bestand darin, entweder namePath hinzuzufügen oder so anzupassen, dass der Benutzername statt des vollständigen Namens verwendet wird.

<script type="text/discourse-plugin" version="0.8">
  api.reopenWidget("poster-name", {
    html(attrs) {
      let contents = this._super(attrs);
      if(contents.length == 2 && api.getCurrentUser()) {
        return contents.shift();
      }
      return contents;
    }
  });
  
  api.reopenWidget("post-avatar", {
    html(attrs) {
      attrs.name = "";
      return  this._super(attrs);
    }
  });
  
  api.reopenWidget("topic-map-summary", {
    html(attrs, state) {
      attrs.createdByName = "";
      attrs.lastPostName = "";
      return  this._super(attrs, state);
    }
  });
  
  api.reopenWidget("topic-participant", {
    html(attrs, state) {
      attrs.name = "";
      return  this._super(attrs, state);
    }
  });

</script>


<!-- https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/components/user-info.hbs -->
<script type="text/x-handlebars" data-template-name="components/user-info">
  <div class="user-image">
    <div class="user-image-inner">
      <a href="{{unbound userPath}}" data-user-card="{{unbound user.username}}">{{avatar user namePath="user.username" imageSize="large"}}</a>
      {{#if user.primary_group_name}}
        {{avatar-flair
          flairURL=user.primary_group_flair_url
          flairBgColor=user.primary_group_flair_bg_color
          flairColor=user.primary_group_flair_color
          groupName=user.primary_group_name}}
      {{/if}}
    </div>
  </div>

  <div class="user-detail">
    <div class='name-line'>
      <span class="username"><a href="{{unbound userPath}}" data-user-card="{{unbound user.username}}">{{format-username user.username}}</a></span>
      <span class="name">{{unbound name}}</span>
    </div>
    <div class="title">{{unbound user.title}}</div>

    {{#if hasBlock}}
      <div class='details'>
        {{yield}}
      </div>
    {{/if}}

  </div>
</script>

<!-- https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/list/posters-column.raw.hbs -->
<script type="text/x-handlebars" data-template-name="list/posters-column.raw">
  <td class='posters'>
  {{#each posters as |poster|}}
  <a href="{{poster.user.path}}" data-user-card="{{poster.user.username}}" class="{{poster.extraClasses}}">{{avatar poster avatarTemplatePath="user.avatar_template" usernamePath="user.username" namePath="user.username" imageSize="small"}}</a>
  {{/each}}
  </td>
</script>

<!-- https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/components/latest-topic-list-item.hbs -->
<script type="text/x-handlebars" data-template-name="components/latest-topic-list-item">
  <div class='topic-poster'>
    {{#user-link user=topic.lastPoster}}
      {{avatar topic.lastPoster namePath="topic.lastPoster" imageSize="large"}}
    {{/user-link}}
  </div>
  <div class='main-link'>
    <div class='top-row'>
      {{raw "topic-status" topic=topic}}
      {{topic-link topic}}
      {{#if topic.featured_link}}
        {{topic-featured-link topic}}
      {{/if}}
      {{topic-post-badges newPosts=topic.totalUnread unseen=topic.unseen url=topic.lastUnreadUrl}}
    </div>
    <div class='bottom-row'>
      {{category-link topic.category}}
      {{discourse-tags topic mode="list"}}
    </div>
  </div>
  <div class='topic-stats'>
    {{raw "list/posts-count-column" topic=topic tagName="div"}}
    <div class="topic-last-activity">
      <a href="{{topic.lastPostUrl}}" title="{{topic.bumpedAtTitle}}">{{format-date topic.bumpedAt format="tiny" noTitle="true"}}</a>
    </div>
  </div>
</script>

Dies sollte nicht als 100% sichere Methode betrachtet werden, aber es wird die Informationen vor allen schützen, die nicht aktiv danach suchen.

Irgendwann wäre es schön, diese Funktionalität als Kernverhalten zu haben, sobald prioritize_username_in_ux aktiviert ist.

@DavidO, haben Sie sich Beginner's guide to using Discourse Themes durchgelesen? Wenn Sie eine Theme-Komponente erstellt und den Code in den allgemeinen <head>-Bereich eingefügt haben, stellen Sie sicher, dass Sie die Komponente zu Ihrem Haupttheme hinzufügen.

OK, danke. Ich werde mich weiter darum kümmern.

Ich stimme zu, dass es schön wäre, dies als Option anzubieten, um den echten Namen für nicht eingeloggte Personen (einschließlich Suchmaschinen) auszublenden.

Danke euch, Jungs.

Ich überlege, einen Teil meiner Community öffentlich zu machen. Um Mitglieder zu schützen, die zu dieser spezifischen Kategorie beigetragen haben, möchte ich ein anonymisierendes Skript wie dieses verwenden. Ich möchte jedoch prioritize_username_in_ux nicht aktivieren. Andererseits wäre es mir recht, wenn alle Namen – sowohl Benutzernamen als auch echte Namen – und vielleicht sogar Avatare verschleiert würden. Gibt es eine Möglichkeit, dies durch eine Anpassung des Skripts zu erreichen?