我有一个用rails 2.3编写的应用程序。此应用程序使用设计进行身份验证。我需要与其他一些项目一起创建一个SSO,比如Worpdress。
由于较新版本的devise包含omniauth支持,我需要创建一个中间应用程序作为auth端点。此工具仅验证用户并重定向到2.3应用程序,并记录用户。
这是流程:
用户登录2.3 app =>请求3.2 app => 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应用程序不知道如何实例化的类。我只是不知道如何找到哪些类。
答案 0 :(得分: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
参考文献:
Rails 3.2 =&gt; 2.3。 This post
Rails 2.3 =&gt; 3.2 This post