您好,各位会员!
希望大家都安好。
我搭建了一个 Discourse 论坛,并尝试将其与我的网站(ASP.NET)连接。
起初,我使用了 Discourse-Connect 并成功了,但是使用它时用户无法在论坛中登录和注册。
因此,我尝试使用 Discourse-Api 登录论坛,但未能成功。
我阅读了许多文档,但没有找到正确的解决方案。
请问有人能帮助我解决这个问题,或者告诉我解决方案的可能性和正确的方法吗?
谢谢!
您有两种选择:
-
设置 DiscourseConnect,以便用户在您的网站上注册和登录,当他们尝试登录您的论坛时将自动完成。这是常规设置。如果您这样配置,那么所有的注册和登录都将在您的网站上进行。论坛上的用户名/密码登录和注册将被禁用。
-
设置 DiscourseConnect,以便用户在您的论坛上注册和登录,当他们尝试登录您的网站时将自动完成。这被称为将 Discourse 设置为 DiscourseConnect 提供者,具体方法可以在此处找到。
感谢您快速回复。
有没有不使用 DiscourseConnect 的可能性?
为什么您不想使用它?
当然,您可以自己实现一些东西,但这将抛弃 DiscourseConnect 在构建过程中积累多年的经验。因此,在您决定承担这项艰巨的任务之前,您必须确定自己构建东西而不是使用现有东西的充分理由。
当然,我知道 DiscourseConnect 是一个很棒的功能。
但我的目的是在 Discourse 论坛上进行本地登录和注册。
所以我尝试使用 Discourse API。
难道 Discourse API 没有这方面的可能性吗?
谢谢。
此致
好的,如果您想在 Discourse 上进行本地登录和注册,请告诉我您希望与您的网站进行何种集成。
我的目的是实现以下功能:
- 如果用户登录了我的网站,当用户访问论坛时,用户将自动登录论坛。
- 并且用户可以在论坛中登录和注册。
- 如果用户登录了论坛,当用户访问我的网站时,用户将自动登录我的网站。
使用 DiscourseConnect,我可以实现 1) 和 3),但无法实现 2)。
但 2) 对我们来说非常重要。
如果您允许用户在两个地方注册,事情很快就会变得一团糟,这就是为什么您必须做出选择,用户要么在您的网站上注册,要么在您的论坛上注册,但不能同时注册。
这对您来说为什么如此重要?
感谢您的帮助。
但是,我的老板想要它。
请检查我的表现。
我尝试使用 Discourse API 进行如下操作:
- 调用 GET ‘/session/csrf’ 并获取 csrf 令牌和 cookie
- 调用 POST ‘/session’,请求头包含:‘X-CSRF-Token’=‘csrf 令牌’, ‘Cookie’ = ‘获取的 cookie’,数据包含:login, password, timezone, second-factor-method, authenticity-token
- 调用 POST ‘/login’,请求头包含:‘Cookie’=‘从 /session 获取的 cookie’
数据包含:username, password, redirect
所有日志与 Discourse 登录工作流程相同。
但是当我重定向到 discourse 论坛时,用户没有登录。
如何解决这个问题?哪里错了?
再次感谢您的帮助。
附注:我的服务器是 Ubuntu Nginx 服务器。
那么你需要向你的老板解释,让用户在多个地方注册是一个非常糟糕的主意。事情会变得一团糟。向他解释当你在网站上使用用户名A注册,在论坛上使用用户名B注册,但使用相同的电子邮件地址时会发生什么!或者当用户只在网站上更改密码,或者只在 Discourse 上更改密码时会发生什么。那样事情就会出问题!
你所做的会将你的服务器以该用户的身份登录到论坛。它不会为用户设置会话 cookie,因此不会将用户登录到论坛。
此外,你显然拥有该用户的明文密码。这是一个非常糟糕的主意。你应该始终存储密码的哈希值(单向加密),而不是明文密码。当你的数据库被黑客入侵时,攻击者将知道你所有用户的密码。这也是可以向你的老板解释的另一件好事。
我已经给了你三个好理由,你可以用来劝说你的老板采取不同的做法。这只会导致巨大的问题。我无法帮助你解决这个问题,因为它行不通。即使你解决了这个问题,它也只能在短期内奏效。
明白了。
我会向我的老板解释这些。
非常感谢。
我想和你进一步讨论(当然不是关于这个)。
此致
请再帮我一个忙。
我的论坛服务器有一个主域名和几个子域名。
我是否可以使用一个数据库在每个域上构建多个 Discourse 论坛?
并且我能这样构建吗?
- 在主域名上,可以本地登录和注册。
- 在子域名上,使用 DiscourseConnect 连接到我的网站。
如果可能,请指导我如何构建。
如果不可能,请告诉我原因。
谢谢。
是的,这是可能的。
- 在此论坛中搜索“multisite”。
- 将主站点设置为 DiscourseConnect 提供商
- 将子域站点设置为 DiscourseConnect 客户端