ほとんどの場合、AJAXを使用して私のカスタムログインフォームで動作するDeviseを修正しました。私が実装しなければならないのは、ユーザが誤ってログインしようとするとAJAX経由でカスタムフォームにログイン失敗のタイプ(空白フィールド、不正確な資格など)に関するメッセージが届くことです。Rails and Devise - Ajaxを介してクライアントに悪いログインのフィードバックを送信します。
私はそうのように、工夫のためsessions_controller.rbで作成する方法を変更するだけで試してみました:
def create
super
respond_to do |format|
format.js
end
end
end
とセッションビューのcreate.js.erbでこのコードを置く:
$("#complete_error").text("<%= "#{flash[:alert]}" %>");
$("#incorrect-log").removeClass("hidden");
これはまったく機能しません。警告が生成されたかどうかをテストするコントローラにputs flash[:alert]
を書き込んでも、結果は得られません。私はAJAXログインに関する他のガイドに従ってみましたが、ちょっと混乱していましたし、私が探していたものを正確に扱わない傾向もありました。
ログインが失敗した場合、ログインアラートを取得して終了する必要がある場合、クライアントに返信するにはどうすればよいですか?
EDIT:ログに
401権限エラー:
Started POST "https://stackoverflow.com/users/sign_in" for ::1 at 2016-08-18 22:38:42 -0400
Processing by SessionsController#create as JS
Parameters: {"utf8"=>"✓", "user"=>{"login"=>"aasdfasdf", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE (lower(username) =
'aasdfasdf' OR lower(email) = 'aasdfasdf') ORDER BY `users`.`id` ASC LIMIT 1
Completed 401 Unauthorized in 2ms (ActiveRecord: 0.3ms)
セッションコントローラ:
class SessionsController < Devise::SessionsController
before_action :authenticate_user!, :only => [:control_panel]
# GET /resource/sign_in
def new
super
end
# POST /resource/sign_in
def create
super
respond_to do |format|
format.js
end
end
# DELETE /resource/sign_out
def destroy
super
end
def control_panel
# Control panel page
end
end
(?
は、私は完全に作成する方法だけでなく、スーパーをオーバーライドする必要があります)
例Warden strategy
を認証コンソールで誤ったログインでは、コンソール内の唯一のものは「http:// localhost:3000/users/sign_in 401(Unauthorized)」というエラーです。 –
あなたはそれを何と考えていますか?あなたはsessionControllerをオーバーライドしますか? –
セッションコントローラをオーバーライドしましたが、アラートにアクセスできないようで、JSを効果的にレンダリングしていないようです。 –