用户可以在其个人资料上显示其 User ID 吗?

有没有办法让用户在查看个人资料时看到自己的 用户 ID

目前,ID 只能通过管理面板对管理员可见,但我希望用户能够公开显示他们的 ID。

这是可以通过管理员设置、组件还是插件启用的功能?
请告诉我!谢谢。

1 个赞

这应该可以在主题组件中完成。用户 ID 无需额外请求即可获取,因此您只需要一些 JavaScript 即可在个人资料页面上的插件插口中显示它。

3 个赞

用例是什么?知道一个随机整数有什么重要性?

4 个赞

因为 UID 是不可变的(永不更改),它可以充当某人账户的永久指纹。用户名可以更改,因此对于支持工单,它可以立即找到他们的账户、交易、认证会话等……UID 不能被伪造,并且永远是唯一的。
我希望每个新用户都能使 UID 递增 1。

@Moin 感谢您的回复,这很有帮助。是的,我可以在“网络”→“XHR”→“响应”中查看响应。完美。但我不知道如何在用户的账户资料页中显示 UID。我想在以下位置显示它:https://mydomain.com/u//preferences/account
但在创建组件中只有这些选项:,标题前,标题后和页脚

这最终是我想要的效果。

我已经通过一些 JavaScript 使 UID 显示出来了,但它只显示在主页的页眉上。

/my/preferences/account 不是公开的;其他用户看不到,但根据您的用例,这可能足以让用户自己看到他们的 ID。

您需要找到一个最接近您想要显示信息的插件插口(plugin outlet)。我通常使用 开发者工具栏 中的按钮使它们在论坛上可见。在论坛中看到它们更容易帮助我找到最佳的插口。您可以在 Theme Developer Tutorial: 1. Introduction 中找到更多关于如何在插口中显示内容的信息。

好的,如果我想让所有人都看到它(公开),我会把它放在:mydomain.com/u/<user_summary>
所以通过在浏览器控制台中调用 enableDevTools(),我认为 user-profile-secondary 将是一个好地方。
我现在试试。

我卡住了。我如何获取我正在查看的用户的 id?因为 api.getCurrentUser 返回的是已登录用户的 ID。

1 个赞

Custom Components -- add button or text at any plugin outlet 是一个关于如何将一些文本固定到任何插件出口位置的示例。我认为你需要创建自己的主题组件才能访问 user_id

我认为你在调用组件时会做类似以下的操作:

        <YourIdComponent
          @user={{@user}}
        />
1 个赞

但是如何通过代码获取其他用户的 user.id 呢。

使用上面 @pfaffman 的帖子,然后您可以拥有一个使用 {{@user.id}} 的组件。请参阅 https://meta.discourse.org/t/theme-developer-tutorial-5-building-and-using-components/357800,但我认为您可以在 Discourse TC UI 的“编辑 CSS/HTML”>“JS”中使用 api.renderInOutlet() 来实现它。

3 个赞

是的,api.renderInOutlet() 非常给力。然而,我之前遇到的问题——现在不重要了,因为我采用了不同的方法来解决——是我不知道如何获取正在查看的个人资料的 user.id

你有什么想法吗?

这是答案,但听起来你没有理解它所需的背景知识。

1 个赞

我认为,如果您选择一个提供您正在查看的用户的模型的插口会更容易。
您选择的插口提供有关主题的信息,但不是有关用户的信息


用户个人资料上的插口,如 `user-post-names`,提供用户模型: https://github.com/discourse/discourse/blob/5b6d32804a1eb658fdc043b082336a17b4c1c944/frontend/discourse/app/templates/user.gjs#L220-L224 使用提供模型的插口,您应该能够像教程中的示例一样使用 `@outletArgs`:https://meta.discourse.org/t/theme-developer-tutorial-4-using-outlets-to-insert-and-replace-content/357799。那里的示例使用 `discovery-list-container-top`,它提供 `@outletArgs={{lazyHash category=@model.category tag=@model.tag}}`

这就是为什么我选择一个提供用户模型的插口。当您将鼠标悬停在插口上并看到您正在查看的用户的 ID 时,您可以看到模型。教程中的许多示例都使用 currentUser 服务,它提供当前用户的 ID,这似乎不是您要找的。

1 个赞
import { apiInitializer } from "discourse/lib/api";

export default apiInitializer((api) => {
    
    api.renderInOutlet("user-post-names",
    `<template>
        {{#if @outletArgs.model}}
            <div class="uid-label-profile">
                UID:
                <span class="uid-value-profile">
                {{ @outletArgs.model.id }}
                </span>
            </div>
        {{/if}}
    </template>
    `);

});

@Moin 你的分析非常准确——我只是照着做了,现在一切都完美运行了。谢谢你。

3 个赞