3

我正在对我们的一位客户使用的 Rails 应用程序进行一些更新。

长话短说,它依赖于 Devise 进行身份验证和 Active Model Serializers 来序列化我们 API 中的数据。

当前版本使用Active Model Serializers 的一个分支,这是一个相当旧的版本。我需要最新版本的 Active Model Serializers 中的一些功能,所以我将 gem 更改为查看master。方便的是,fork 中的更改已添加到 AMS 的最新版本中,因此我更改了语法,一切看起来都很好。

但是,一旦我退出该站点并重新登录,我就意识到有些东西非常糟糕。正如预期的那样,注销的用户会被重定向到 /users/sign_in。然而,自从 gem 更新以来,该页面现在是空白的 - 没有标题,没有 HTML,什么都没有。只是白色。我恢复到旧版本的 gem 以确认这是问题所在,并且 /users/sign_in 页面运行良好。

检查我的 rails 调试输出,我显示以下内容:

Started GET "/users/sign_in" for 127.0.0.1 at 2013-03-25 11:15:05 -0500
Processing by Devise::SessionsController#new as HTML
Completed 406 Not Acceptable in 76ms (ActiveRecord: 2.1ms)

有人对为什么我的观点突然空白有一些提示吗?

附加信息

我不确定这是否相关,但这也很有趣。我尝试卷曲 /users/sign_in 页面,并在 cURL 上得到 JSON 响应。

{"user":{"id":null,"email":"","name":null}}

这不是在普通浏览器上实现的。

__

在我的路线中,我有以下行将 Devise 映射到 /users,并覆盖注册控制器。

devise_for :users, :controllers => { :registrations => 'registrations'}

注册控制器如下所示:

class RegistrationsController < Devise::RegistrationsController
  before_filter :authenticate_user!, :redirect_unless_admin

  private
  def redirect_unless_admin
    unless current_user && current_user.admin?
      redirect_to root_path
    end
  end
end
4

1 回答 1

0

好吧,不可避免地,一旦我发布问题,我总是会立即找到答案。

显然,最新版本的 Devise 默认只有一个respond_toon :html

正常的问题是人们无法让 Devise 的 JSON 视图工作。出于某种原因——可能是由于代码库混乱——对我来说恰恰相反。为了解决这个问题,我将以下内容添加到我的应用程序控制器中。

respond_to :html

现在,再一次,一切都很好。

于 2013-03-25T16:33:30.550 回答