私は非常に標準的なDeviseログイン手順を持っています:
意見:
resource_name、:url => session_path(resource_name))do | f | %><%= f.input :password, input_html: {class: "span6"} %>
<% if devise_mapping.rememberable? -%>
<p><%= f.check_box :remember_me %> Remember me</p>
<% end -%>
<input type="hidden" name="after_sign_in_page" value="<%=@after_sign_in_page%>">
<p><%= f.submit "Sign in", class: "btn btn-success" %></p>
そして、メールをダウンケース化するためのセッションコントローラーを作成しました。
class SessionsController < Devise::SessionsController
def create
params[:user][:email].downcase!
super
logger.debug "Errors: #{resource.errors}"
end
適切な資格情報を使用したログインは正常に行われます。
間違った資格情報を使用すると、次のログを使用してサインインページにリダイレクトされます。
Started POST "/users/sign_in" for 127.0.0.1 at 2013-01-10 09:59:44 +0100
Processing by SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"8eytQkr20JOOOdDvpCWakbmUzNoaHMxK9/BSEVxETik=", "user"=>{"email"=>"nicolas@demoreau.be", "password"=>"[FILTERED]", "remember_me"=>"0"}, "after_sign_in_page"=>"", "commit"=>"Sign in"}
Time zone: (GMT+00:00) UTC, current area: , user to register: , current controller: sessions
Completed 401 Unauthorized in 69ms
Processing by SessionsController#new as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"8eytQkr20JOOOdDvpCWakbmUzNoaHMxK9/BSEVxETik=", "user"=>{"email"=>"nicolas@demoreau.be", "password"=>"[FILTERED]", "remember_me"=>"0"}, "after_sign_in_page"=>"", "commit"=>"Sign in"}
Rendered devise/sessions/_new.html.erb (17.8ms)
Rendered devise/sessions/new.html.erb within layouts/application (19.7ms)
Rendered layouts/_header.html.erb (66.1ms)
Completed 200 OK in 173ms (Views: 98.3ms | ActiveRecord: 0.9ms)
どうやら401はWardenによってドロップされたようですが、理由がわかりませんでした。ユーザーはログインページに正しくリダイレクトされますが、エラーメッセージは表示されません(リダイレクトによって消去されるため、これは正常です)。
私は何が間違っているのですか?
ありがとう!
編集1:
今のところ、私は簡単なハックを見つけました。これをSessionsController#newに追加しました
if params[:user]
flash[:alert] = "Incorrect login or password"
end
あまりエレガントではありませんが、少なくとも私には何かがあります。