【发布时间】:2011-05-26 02:08:33
【问题描述】:
将 Rails 3.0.3 与 devise 之类的 gem 结合使用时,我没有收到任何 Flash 消息。 现在我提到设计,因为它控制着用于对我进行身份验证的 cookie。
现在 Rails 应用程序有点特别,因为它使用 子域。他们所做的是告诉应用程序用户正在浏览哪家公司。一个例子:mycompany.theapp.com/projects/3/ 当用户登录时,他/她会被定向到 app.com/overview 那里的每个通知都会显示,那么为什么不在子域页面上呢?
所以这是子域页面上使用的代码。与将其放在非子域页面上完全相同。 控制器中的代码:
def update
redirect_to [@project], :notice => "Project #{@project.name} updated."
end
布局/application.html.erb
<% flash.each do |type, message| %>
<%= content_tag :div, message, :class => "flash #{type}" %>
<% end %>
我还添加了以下内容,试图弄清楚发生了什么:
flash.to_yaml
# Result: --- !map:ActionDispatch::Flash::FlashHash {}
因为显然 devise 使用 flash[:notice] 我也尝试过(因为这对 devise 有效)。
flash[:notice] = "Project #{@project.name} updated."
# Result: --- !map:ActionDispatch::Flash::FlashHash {}
现在通知是否通过 cookie 或会话数据发送,这些数据没有很好地传输到子域?因为项目的编辑表格在 mycompany.theapp.com/projects/3/edit/
它把我送到
mycompany.theapp.com/projects/3/(恕不另行通知)
它发生在带有“rails 服务器”的 Ubuntu 10.10、使用 nginx 的乘客甚至 Mac 机器上(但其他人对此进行了测试)。
有人愿意猜吗?
【问题讨论】:
-
您确定当用户转移到子域时他们仍处于登录状态?这不是默认行为(您必须明确允许 cookie 跨子域)。也许用户没有登录并且正在为布局中没有闪烁的视图提供服务?
标签: ruby-on-rails devise subdomain rails-flash