0
  @user = FactoryGirl.create(:user)
  @user2 = FactoryGirl.create(:user)

  @request.env["devise.mapping"] = Devise.mappings[:user]

  controller.current_user.should be_nil

  post :create, :user => {email: @user.email, password: @user.test_pass}
  flash[:alert].should be_nil
  controller.should(respond_to(:current_user))
  controller.current_user.should_not be_nil

  post :create, :user => {email: @user2.email, password: @user2.test_pass}

  flash[:alert].should be_nil
  controller.should(respond_to(:current_user))
  controller.current_user.should == @user2

最后一个失败。它仍然是@user,而不是@user2。

编辑:

如果我这样做,这是注销用户并清除会话的公平方式吗?

class SessionsController < Devise::SessionsController

  def create
    if warden.authenticated?(:user)
      sign_out(current_user)
    end
    super
  end
end
4

1 回答 1

1

设计身份验证的流程非常合乎逻辑,一旦您登录/注册,您将被重定向并且您的会话将被启动并被捕获,您需要先签出,然后才能启动新会话。

现在我看到您正在测试默认设计行为,要求它在创建第二个用户时退出第一个用户?well devise 不会这样做,但如果您的应用程序需要这样做,为什么不使用回调方法 before_create 呢?

我想这就是 Red、Green、Refactor 的全部想法。

于 2012-09-19T10:35:02.150 回答