私たちのアプリをRails 2.3.xからRails 3.1.3にアップグレードした後に、私たちの管理パネルにログインしたように見えない。私はDeviseの最新バージョンを使用していますが、この記事の時点ではv1.5.3です。Devitsは、更新されたRails 3.1アプリの401を少しカスタムルートで返す
POST
からsession#create
ルートは、401
応答を返します(すべてのパラメータは正常に入力されているように見えます)。 WardenがDeviseの戦略(:database_authenticatable
)の1つを使用してユーザーを認証しようとしたときに発生します。ここに私のユーザーモデルがあります。
class User < ActiveRecord::Base
devise :database_authenticatable, :validatable
attr_accessible :email, :password, :password_confirmation
end
私は私の:admin
名前空間(ログインは管理者のみのためのものである、と彼らは自分のサイトのレイアウトを持っている、これオーバーライド)でオーバーライドDevise::SessionsController
を持っています。特別なことは何もレイアウト以外の、本当に、コントローラにありません:
class Admin::SessionsController < ::Devise::SessionsController
layout "admin"
end
私は少しカスタマイズしたルートを持っている、とここで私はそのために持っているコードです。
devise_for :users, :controllers => { :sessions => 'admin/sessions' }
私は私のレイアウトのヘッダにcsrf_meta_tag
ビットを持っている、と私ApplicationController
はそれでprotect_from_forgery
ラインを持っています。フォームのエラーは、ページを再レンダリングするときに空になります。
私はコードを踏んで(lib/warden/proxy.rb
まで)、私が使用している:database_authenticatable
の戦略が有効であるとは思われません(その部分にはWarden's source code)。ユーザーは有効なユーザーです... Rails rails console
IRBセッションを経由して、有効なパスワードとすべてを使ってゼロから作成しました。私はそれが正当なものであると認識すべきだと思っていますか?それとも、私は正しい木を鳴らしていますか?
これはちょっと古いかもしれませんが、これはまさに私がやっていたことです。私はモデルで指定されたauthentication_keyしか持っておらず、見落としていました。あなたの投稿は少なくとも私がそれを見つけるのを助けました。 –
待って、これはダッシュバスターの名声のジェリージョーンズですか?お役に立てて嬉しいです! –
名誉?私はDashbusterから名声を得ているのか分からなかった!うん、それは大丈夫です。 –