我在 Disqus 中使用了 SSO,这样我的经过身份验证的用户就可以自动发帖到我的 Disqus 论坛,而无需单独进行身份验证。但是,我无法找到通过服务器端 API 调用将 SSO 用户列入白名单的方法。似乎在任何与用户相关的 API 调用中都无法识别我的 SSO 用户。
我尝试使用 user=[userid]
和 email=[email]
调用 whitelists/add
,并传递确切的用户 ID以及我用来设置 SSO 用户的电子邮件。用户 ID 不会返回任何错误,但它什么也不做。传递电子邮件会引发错误。
我尝试通过 users/detail
API 查找我的 SSO 用户的 Disqus 用户 ID 或用户名:
user=myuserid (the same id used for SSO)
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3f5a525e56530252464a4c5a4d7f5a525e5653115c5052" rel="noreferrer noopener nofollow">[email protected]</a> (the same email used for SSO)
user=remote:forumshortname-myuserid
user:username=forumshortname-myuserid
运气不好。
对 /listUsers
和 /users/detail
的 API 调用根本不会列出我的 sso 用户,因此我无法以这种方式检索他们的用户句柄。
令人沮丧的是,我可以在此处的 UI 控制台中看到用户: https://disqus.com/api/sso/users/ 对于域(而不是论坛),所以我知道这些数据存在。但我找不到通过 API 来实现它的方法。
有人有这个工作吗?
最佳答案
就 Disqus API 而言,SSO 用户的用户 ID 和用户名是由 Disqus 分配的,而不是网站分配的。它们在 Disqus 网络中是唯一的,尽管它们仅位于您网站的本地。
但是,如果您有自己的本地用户 ID,则可以对 Disqus 用户名进行反向查找以使用 API。模式为 {sso_slug}-{user_id_md5}
假设您的 SSO 远程域 slug 是 example
,您可以在 python 中检索 Disqus 用户名,如下所示:
import hashlib
def get_disqus_username(user_id):
m = hashlib.md5(user_id)
hashed_id = m.hexdigest()
return 'example-' + str(hashed_id)
现在您可以像这样发出 API 请求:
获取 https://disqus.com/api/3.0/users/details.json?api_key=YOUR_PUBLIC_KEY&user=用户名:DISQUS_USERNAME
关于single-sign-on - 如何在 Disqus 中查找 SSO 用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26225227/