Выход пользователя и администратора из Devise и тестирование через RSPEC - PullRequest
4 голосов
/ 29 февраля 2012

Я использую Devise в железнодорожном приложении.

У меня есть две модели: Пользователь и Администратор.

В настоящее время я могу войти в систему как в качестве пользователя, так и в качестве администратора, если захожу на страницу входа пользователя и администратора.

Я хотел бы принудительно выйти из одного, если другой войдет в систему. Какой лучший способ сделать это?

Кроме того, если у кого-то есть хороший способ проверить это в rspec / capybara, пожалуйста, поделитесь!

Спасибо

1 Ответ

5 голосов
/ 29 февраля 2012

Я бы скопировал контроллеры Devise и добавил фильтр перед следующим образом:

class Users::SessionsController < Devise::SessionsController

  before_filter :logout_admin, :only => "create"

  def create
    super
  end

  private

  def logout_admin
    # change :admin to :user in the admin's session controller
    # the sign_out is a devise controller helper that forces sign out
    sign_out :admin
  end

end

Затем для тестирования вы можете получить доступ к текущему пользователю в функциональных (контроллерных) спецификациях, вызвав subject.current_user или subject.current_admin, перейдите сюда: https://github.com/plataformatec/devise, чтобы убедиться, что включены тестовые помощники, а затем попробуйте что-то вроде это:

require 'spec_helper'

describe Users::SessionsController do
  login_admin

  describe "POST create" do
    it "should logout admin" do
      post :create, {:user => {:email => "tester@email.com", :password => "secret"} }
      subject.current_user.should_not be_nil
      subject.current_admin.should be_nil
    end
  end
end
...