Разработать: вдруг не могу войти - PullRequest
5 голосов
/ 20 мая 2011

Я использую Devise 1.3.4 для аутентификации бэкенда в моем приложении. Уже пару дней я не могу войти. Что происходит, это:

  • Я захожу на страницу входа / admin / sign_in
  • Войти с хорошими учетными данными
  • Смотрите в журнале, что логин работал (last_sign_in_at, current_sign_in_at и current_sign_in_ip установлены, sign_in_count увеличен)
  • Контроллер сессий Devise пытается перенаправить меня на after_sign_in_path_for, который я указал в своем контроллере приложения (Admin :: DashboardsController # show)
  • Затем внезапно страница входа снова отображается. Нет перенаправления, нет ничего.

Я проверил before_filters, и это определенно autorize_admin_user Devise! фильтр, вызывающий проблемы (фильтры до его вызова, фильтры после него не вызываются). Это означает, что даже после успешного входа в систему он не распознает меня как зарегистрированного.

Я понимаю, что трудно найти решение, не видя большую часть моего кода. Поэтому мой первый вопрос будет:

Как я могу отладить эту ошибку? Как я могу отследить, где именно логин не работает? Должен ли я копаться в Warden? Это может быть проблема сеанса / файла cookie? Как я мог это отладить?

Все идеи приветствуются!

Вот что говорит журнал:

Started GET "/admin/sign_in" for 127.0.0.1 at 2011-05-20 13:49:11 +0200
[Barista] Compiling all scripts for barista
[Barista] Compiling all coffeescripts
  Processing by Admin::SessionsController#new as HTML
Rendered admin/shared/_header.html.haml (3.1ms)
Rendered admin/shared/_menu.html.haml (1.7ms)
Rendered admin/sessions/new.html.haml within layouts/admin (128.7ms)
Completed 200 OK in 171ms (Views: 133.0ms | ActiveRecord: 0.0ms)


Started POST "/admin/sign_in" for 127.0.0.1 at 2011-05-20 13:49:15 +0200
[Barista] Compiling all scripts for barista
[Barista] Compiling all coffeescripts
  Processing by Admin::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"VLjjo6W+sd7yRH3SRSNpUN3L8a+OaOgCUpJgB5VaGEM=", "admin_user"=>{"email"=>"my@email.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
  AdminUser Load (0.7ms)  SELECT `admin_users`.* FROM `admin_users` WHERE `admin_users`.`email` = 'admin3@gmail.com' LIMIT 1
  SQL (0.2ms)  BEGIN
  AREL (0.3ms)  UPDATE `admin_users` SET `last_sign_in_at` = '2011-05-20 11:49:15', `current_sign_in_at` = '2011-05-20 11:49:15', `current_sign_in_ip` = '127.0.0.1', `sign_in_count` = 3, `updated_at` = '2011-05-20 11:49:15' WHERE `admin_users`.`id` = 33
  SQL (0.5ms)  COMMIT
Redirected to http://myapp.dev/admin
Completed 302 Found in 160ms


Started GET "/admin" for 127.0.0.1 at 2011-05-20 13:49:15 +0200
[Barista] Compiling all scripts for barista
[Barista] Compiling all coffeescripts
  Processing by Admin::DashboardsController#show as HTML
Completed   in 26ms


Started GET "/admin/sign_in" for 127.0.0.1 at 2011-05-20 13:49:16 +0200
[Barista] Compiling all scripts for barista
[Barista] Compiling all coffeescripts
  Processing by Admin::SessionsController#new as HTML
Rendered admin/shared/_header.html.haml (3.5ms)
Rendered admin/shared/_menu.html.haml (2.0ms)
Rendered admin/sessions/new.html.haml within layouts/admin (134.9ms)
Completed 200 OK in 182ms (Views: 139.2ms | ActiveRecord: 0.0ms)

Ответы [ 3 ]

5 голосов
/ 21 мая 2011

У меня недавно была похожая проблема, потому что я играл с файлом cookie сеанса. Я играл с доменом и установил его: domain =>: все в "initializers / session_store.rb". В результате этого логин перестал работать в среде разработки.

Если вы внесли какие-либо изменения в файл session_store.rb, то, вероятно, вам нужно отменить эти изменения и посмотреть, снова ли все заработает. Если это так, то вы можете определить хранилище сеансов в зависимости от среды:

if Rails.env.production?  
  Appname::Application.config.session_store :cookie_store, {:key => '_cookie_name', :domain => :all}  
else  
  Appname::Application.config.session_store :cookie_store, :key => '_cookie_name'  
end
4 голосов
/ 22 мая 2011

Хорошо, после 2 дней возни я наконец нашел ответ.

Одновременно появилась другая ошибка, но сначала я не установил соединение.Ошибка состояла в том, что когда пользователь хотел выйти из системы, Devise попытался удалить файл cookie сеанса и использовал конфигурацию для моего хранилища сеансов, чтобы выяснить, где мое приложение хранит файлы cookie сеансов.Теперь я использую «конфигурацию приложения», такую ​​как this и redis-store для моих сессий.Моя конфигурация хранилища сессий выглядела так

MyApp::Application.config.session_store :redis_session_store, AppConfig.redis

AppConfig.redis выглядит примерно так:

{ :port => 123, :namespace => 'foo' }

Проблема в том, что AppConfig.redis это ActiveSupport::HashWithIndifferentAccess, а не Hash,В какой-то момент кто-то пытается вызвать symbolize_keys! для него, и это не удается, потому что ActiveSupport::HashWithIndifferentAccess не имеет этого метода.

Короче говоря: я изменил AppConfig.redis на AppConfig.redis.to_hash, и все снова заработало,Проблема, которая помешала мне войти, по-видимому, заключалась в том, что сессионный cookie для моего пользователя все еще существовал.(Или у кого-нибудь есть лучшее объяснение?).Все еще странно, что Devise не выдает правильное исключение или просто перезаписывает cookie-файл сессий.

1 голос
/ 20 мая 2011

Я бы начал отладку в том месте, где ваш контроллер пытается аутентифицировать пользователя. Такое ощущение, что именно здесь все могло пойти не так.

В нашем приложении на основе устройства он находится в контроллере:

before_filter :authenticate_user!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...