Почему Warden/Devise добавляет имя ресурса при сбое аутентификации sign_in?

Я искал это как сумасшедший, и пока не повезло.

Пока что sign_in и sign_out работают нормально. Они перенаправляют на правильное действие. Моя проблема в том, что sign_in не работает. Меня отправляют на то, что выглядит как пустая html-страница с надписью «Неверный логин или пароль». отображаемый действием create, или текст, отображаемый действием create . AFAIK create должен перенаправлять или отображать только в случае сбоя. У меня есть собственный контроллер, и единственная причина, по которой у меня есть приведенный здесь код разработки, — это посмотреть, где происходит поведение. Мне действительно нужно только наследовать поведение на этом этапе, потому что я не пытаюсь перенаправить на пользовательский путь после аутентификации.

журнал выглядит следующим образом:

Started POST "/login.user" for 127.0.0.1 at 2012-05-14 15:50:02 -0700
Processing by Users::SessionsController#create as 
Parameters: {"utf8"=>"✓",   "authenticity_token"=>"Pf2+YBqmb5+231nbuD/MeDlz6H7/qOjV4N50WnlJ0rc=", "user"=>{"login"=>"qwdwqqd", "password"=>"[FILTERED]", "remember_me"=>"0"}, "x"=>"40", "y"=>"8"}
Completed 401 Unauthorized in 32ms

Вот мой контроллер:

Users::SessionsController < ::Devise::SessionsController

def create
  resource = warden.authenticate!(auth_options)
  set_flash_message(:notice, :signed_in) if is_navigational_format?
  sign_in(resource_name, resource)
  respond_with resource, :location => after_sign_in_path_for(resource)
end

Мои маршруты следующие:

devise_for :users, :controllers => {:sessions => "users/sessions", :registrations => "users/registrations"}, :path => '', :path_names => { :sign_in => 'login', :sign_out => 'logout' }
.
.
root :to => 'root#index'

Я решил, что это не проходит мимо

resource = warden.authenticate!(auth_options)

строка при сбое аутентификации

Кажется, что имя ресурса каким-то образом добавляется к пути входа в систему после сбоя надзирателя. например /login.user вместо просто /login

Любая помощь будет оценена, спасибо заранее.

Rails 3.2, Devise 2.0.4, стойка (1.4.1), ruby ​​1.9.3


person setclockpm    schedule 14.05.2012    source источник
comment
Вы пробовали это в производстве? Может ли это быть связано с этим?   -  person Ashitaka    schedule 15.05.2012
comment
нет, я еще не закончил разработку. Это может помочь, я занимаюсь преобразованием приложения rails 2 в rails 3. Я использую database_authenticable.   -  person setclockpm    schedule 15.05.2012
comment
Могу я спросить, почему вы переопределяете контроллер сеансов?   -  person janders223    schedule 17.05.2012
comment
только потому, что я хотел, чтобы пространство имен находилось под пользователем (пользователями) и имело больше контроля над представлениями. Я совершенно согласен с вызовом super для части аутентификации. Я на самом деле предпочитаю это. Я скопировал код с github только для того, чтобы определить виновную строку.   -  person setclockpm    schedule 17.05.2012


Ответы (1)


На всякий случай, если кому-то еще интересно. Я удалил аргумент ресурса в форме create_user_session. Другими словами, я пошел от этого:

<%= form_for(resource, :as => resource_name, :url => user_session_path(resource)) do |f| %>

к этому:

<%= form_for(resource, :as => resource_name, :url => user_session_path) do |f| %>

это помогло. Я чувствую себя довольно глупо из-за того, что не заглянул сюда раньше.

person setclockpm    schedule 23.05.2012