401ステータスコードを設定できるように、Deviseの失敗応答をオーバーライドしています。ただし、ユーザーがサインインに失敗すると、「リダイレクトされています」リンクのあるページにリダイレクトされます。これを:status => 401
リダイレクトから削除すると、正常に機能します。
class CustomFailure < Devise::FailureApp
def redirect_url
new_user_session_url(:subdomain => 'secure')
end
def respond
if http_auth?
http_auth
else
store_location!
flash[:alert] = i18n_message unless flash[:notice]
redirect_to redirect_url, :status => 401
end
end
end
編集
または、フラッシュメッセージを表示して同じページにとどまりますが、次のコード行を追加します。
render :text => "unauthorized", :status => 401
ルビーに文句を言う:
undefined method `render' for #<CustomFailure:0x00000103367f28>
ここで何が起こっているのですか?