3

クライアントの 1 人が使用している Rails アプリを更新しています。

簡単に言うと、認証には Devise を、API でのデータのシリアル化には Active Model Serializers に依存しています。

現在のバージョンは、かなり古いバージョンの Active Model Serializers のフォークを使用しています。Active Model Serializers の最新バージョンでいくつかの機能が必要だったので、gem を変更してmasterを参照するようにしました。便利なことに、フォークの変更は 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 してみましたが、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_toオンになっているだけ:htmlです。

これに関する通常の問題は、人々が Devise の JSON ビューを動作させることができないということです。なんらかの理由で (おそらくコードベースがごちゃごちゃしているため)、私には逆のことが当てはまりました。この問題を解決するために、アプリケーション コントローラーに以下を追加しました。

respond_to :html

さて、もう一度言いますが、すべて順調です。

于 2013-03-25T16:33:30.550 に答える