我想在我的网站上集成 Discord 的 OAuth2.0,这样我就可以将用户添加到我的公会并赋予他们特定的角色。
我搜索了开发者门户文档,但没有找到任何内容。
Discord Oauth 实现在https://discordapp.com/developers/docs/topics/oauth2中进行了描述。您可能需要将其与 RFC 6749 一起阅读,以大致了解 Oauth 的工作原理。
您不仅需要一个 Discord“应用程序”,而且该应用程序还需要一个您已经加入相关公会(即“服务器”)的机器人帐户。机器人需要在行会中拥有权限,CREATE_INSTANT_INVITE并且机器人帐户需要在角色列表中拥有比将分配给用户的角色更高的角色。另一方面,您不需要让机器人实际连接到 Discord websocket 网关。MANAGE_ROLES
步骤如下:
将用户发送到Discord 上的授权 URL,其中包含标识您的应用程序的查询参数,并请求identify和guilds.join范围。
如果用户正确识别并批准请求,他的浏览器最终将被重定向到您选择的指向后端服务器的 URL。此 URL 作为授权 URL 中的参数给出,并且必须提前在应用程序控制面板中列入白名单。
常见错误:重定向 URL 必须与白名单 URL 字符匹配。一个是另一个的前缀是不够的。
当您收到重定向时,需要检查(使用会话 cookie 或您正在使用的任何内容)该用户是否是您想要添加到您的公会的人,
Discord 将某些查询字符串添加到重定向 URL,您的后端可以使用这些字符串来构造对 Discord 的令牌交换请求。在此请求中,您提供应用程序的秘密凭据以及来自重定向的加密代码,并且您将获得一个不记名令牌,该令牌代表您的应用程序和您从该特定用户获得的权利的组合。
常见错误:令牌交换请求的参数之一必须再次是原始重定向 URL。这必须与您在步骤 1 中使用的 URL 相同。它不能是不同的 URL,即使不同的 URL 也已列入您的应用程序的白名单!
常见错误:令牌交换请求的大部分参数都放在 POST 正文中,必须按application/x-www-form-urlencoded格式进行编码。有时,人们使用默认将数据编码为 JSON 的 HTTP 堆栈,并且很困惑它不起作用。如果您发送的实际数据被序列化为 JSON,则application/x-www-form-urlencoded放入标头将不起作用。Content-Type
警告:您可能会发现一些代码示例尝试将令牌交换参数作为 URL 中的查询参数而不是 POST 正文中的查询参数。Discord曾经接受过这一点,但现在不再接受了。
使用您在令牌交换中获得的不记名令牌进行身份验证的“获取当前用户”请求。这将为您提供正在交谈的用户的 Discord ID。
您现在拥有发出添加公会成员请求所需的信息,该请求使用固定机器人令牌进行身份验证,并在 PUT 主体中包含用户的不记名令牌,这次必须是 JSON。您可以使用可选参数来设置新成员开始时的角色。roles
常见错误:这应该是 PUT 请求,而不是 POST。
我假设您硬编码(或配置)您正在管理的公会的 ID 以及您正在分配的角色。
请注意,即使 Discord ID 是(64 位)整数,它们也应该在 JSON 正文中序列化为字符串,以便与 JavaScript 等本身不支持如此大整数的语言兼容。
(另请参阅https://discordapp.com/developers/docs/reference#authentication了解步骤 4 和 5 的身份验证详细信息)。
| 归档时间: | 
 | 
| 查看次数: | 3488 次 | 
| 最近记录: |