4

我使用 Devise 设置了一个 rails 3.2.11 应用程序进行身份验证。我想使用ember.js作为 mvc 框架。

当我对 POST /users.json 路由发起 ajax 调用时,我得到 406 Not Acceptable。

这是我的ajax调用:

urlBase : '/users'

signup : (username, email, password, passwordConfirmation) ->
  $.ajax
    url: "#{@.get('urlBase')}.json"
    type: "POST"
    dataType: "json"
    data:
      "user[username]": username
      "user[email]": email
      "user[password]": password
      "user[password_confirmation]": passwordConfirmation

    success: (data) ->
      alert('Completed sign up process: '+ JSON.stringify(data));
      @errorMsg = "Signed up successfully." 

    error: (jqXHR, textStatus, errorThrown) ->
      alert "Error completing sign up: " + textStatus + " error: " + errorThrown

以下是日志:

Started POST "/users.json" for 127.0.0.1 at 2013-01-14 14:38:57 +0100
Processing by Devise::RegistrationsController#create as JSON
  Parameters: {"user"=>{"username"=>"obo", "email"=>"obo@obo.dv", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}
   (1.3ms)  begin transaction
  User Exists (1.3ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = 'obo@obo.dv' LIMIT 1
   (0.1ms)  rollback transaction
Completed 406 Not Acceptable in 311ms (ActiveRecord: 2.6ms)

我不明白为什么会这样。

4

2 回答 2

4

你用的是什么版本的设计?

上周我在意外升级到 Devise 2.2.0 后遇到了类似的问题。在该版本中进行了一些向后不兼容的更改,包括默认情况下DeviseController仅响应的更改。HTML您可以添加其他格式,例如JSON,这应该可以解决您的问题。

在 Github 上的变更日志中阅读有关设计变更的信息。如果您不想这样做,请尝试降级到 Devise 2.1.2,这是我暂时所做的。

于 2013-01-14T14:17:00.383 回答
2

Zajn 的回答解释说 DeviseController 现在只响应 HTML 格式(从 2.2.0 版开始)。更改日志说要将 JSON 格式添加到 DeviseController.respond_to 。

我将 SessionsController 和 RegistrationsController 子类化并添加了 respond_to :json :

class RegistrationsController < Devise::RegistrationsController
  respond_to :json
end

class SessionsController < Devise::RegistrationsController
  respond_to :json
end
于 2013-01-14T14:52:28.840 回答