通过 cookie 令牌登录 Discourse

我们使用 Discourse 作为社区站点,并且有一个官方网站。
因此,我们希望用户在登录官方网站后,能够自动登录 Discourse。
我们的官方网站会在用户登录时添加一个 cookie,并且我们在 Discourse 中使用了 cookie 共享。Discourse 在 cookie 中获取授权,并获取用户信息以登录。
代码实现如下:

# application_controller.rb
  before_action :check_cookie_login
  def check_cookie_login
    if !current_user && cookies[:authorization]
      external_id = get_external_id cookies[:authorization]
      cookie_log_on_user external_id
    end
  end
# current_user.rb
 def cookie_log_on_user(external_id)
    sso_record = SingleSignOnRecord.find_by(external_id: external_id)
    user = sso_record.user
    log_on_user(user)
  end
# defalt_current_user_provider.rb
 def log_off_user(session, cookie_jar)
    ……
   cookie_jar.delete('authorization')
 end

我想知道我这样做有什么不对吗?有没有更好的方法?

这不安全。用户可以篡改其浏览器中的 cookie 并以其他人的身份登录。

您应该改用 DiscourseConnect

3 个赞

感谢您的建议。我是 Discourse 的新手。如果我改用 DiscourseConnect,我是否需要一个 Web API 来返回 DiscourseConnect 所需的随机数?

1 个赞