Разработать не перенаправление на страницу входа при неверной попытке с пользовательскими маршрутами - PullRequest
1 голос
/ 07 января 2012

Используя Devise и пользовательские маршруты, всякий раз, когда у пользователя есть неверная попытка входа (неправильный проход), Rails не перенаправляет обратно на страницу входа.Если я не использую пользовательские маршруты, то все работает нормально.Что я здесь не так делаю?

Цель: я хочу использовать / signin вместо / users / sign_in

rout.rb:

devise_for :users, :controllers => { :sessions => "user_sessions" },:skip => [:sessions] do
   get 'signin' => 'user_sessions#new', :as => :new_user_session
   post 'signin' => 'user_sessions#create', :as => :user_session
   delete 'signout' => 'user_sessions#destroy', :as => :destroy_user_session
   get 'signout' => 'user_sessions#destroy', :as => :destroy_user_session
end

внутри UserSessionsController / create:

resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")

Вывод сервера при использовании пользовательского маршрута / входа:

Completed 401 Unauthorized in 2ms

Вывод сервера при использовании маршрута по умолчанию / user / sign_in:

Completed 401 Unauthorized in 2ms
Processing by UserSessionsController#new as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"2gqKTGWPv69HpVp7oSEg2tRDj5FU453my7LhKm0xu7E=", "user"=>{"email"=>"", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"SIGN IN"}
Rendered user_sessions/new.html.erb within layouts/user_sessions (56.6ms)

Ответы [ 2 ]

1 голос
/ 19 апреля 2013

Замена:

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

с:

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

в файле session / new.html.erb у меня сработало.

0 голосов
/ 05 июня 2012

Я знаю, что этот вопрос был опубликован пару месяцев назад, но я решил ту же проблему, и после нескольких часов борьбы с ней, перезаписи Devise SessionController, Devise Custom Failure, отладки и т. Д., Я наконец-то узнал, что продолжалось, и я решил поделиться решением, чтобы вам, ребята, не пришлось проходить через это. Ошибка «Completed 401 Unauthorized in XXms» возникает в методе создания SessionController по адресу lign: resource = build_resource (...). И ресурс не может быть собран, так как ресурс не передается на сервер. Теперь проблема заключается в том, ПОЧЕМУ ресурс не передается на сервер? Я использую мобильный телефон JQUERY, который публикует sign_in как вызов AJAX, и JQUERY не может загружать такие данные через AJAX. Yuu нужно добавить в вашу форму входа data-ajax = false: в Devise / session / new.html.erb измените форму, чтобы она выглядела следующим образом:

form_for(resource, :as => resource_name, :url => user_session_url, html: {data: {ajax: false}}) do |f|

Надеюсь, что это поможет кому-то в будущем.

...