0

我有一个用 rails 2.3 编写的应用程序。此应用程序使用设备进行身份验证。我需要与其他一些项目(如 Worpdress)创建 SSO。

因为较新版本的设计包含omniauth 支持,所以我需要创建一个中间应用程序作为身份验证端点。此工具仅会验证用户并重定向到 2.3 应用程序,用户已登录。

这是流程:

用户登录 2.3 应用程序 => 请求 3.2 应用程序 => 使用外部系统进行 OAuth => 登录 2.3 应用程序

我做了所有需要的配置。基本上是共享相同的密钥和秘密以允许应用程序共享会话。问题是在成功登录后,我在 2.3 应用程序中收到以下错误:

Status: 500 Internal Server Error
Session contains objects whose class definition isn\'t available.
Remember to require the classes for all objects kept in the session.
(Original exception: #{const_error.message} [#{const_error.class}])

我猜这个错误意味着我的会话包含一些 2.3 应用程序不知道如何实例化的类。我只是不知道如何找到哪些类。

4

1 回答 1

1

解决了。问题是在 3.2 rails 应用程序中添加的 Flash 消息。此消息的类是 ActionDispatch::Flash::FlashHash,2.3 应用程序的类是 ActionController::Flash::FlashHash。

我的解决方案是删除调用 set_flash_message。既然你解决了 3.2 => 2.3,也许你需要回到 3.2 应用程序。由于 2.3 应用程序将添加带有“错误”类的 Flash 消息,因此您需要在 3.2 应用程序中添加这个新类的定义:

# config/initializers/session_store.rb
module ActionController
  module Flash
    class FlashHash < Hash
      def method_missing(m, *a, &;b)
      end
    end
  end
end

参考:

导轨 3.2 => 2.3。这个帖子

Rails 2.3 => 3.2这篇文章

于 2013-02-21T20:15:50.460 回答