2012-09-19 29 views
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。SessionController#創建2個用戶

編輯:

如果我這樣做,這是註銷用戶並清除會話的公平的方式?

class SessionsController < Devise::SessionsController 

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

回答

1

好色器件認證的流程是相當的邏輯,一旦你簽入/簽了,你會被重定向和您的會議將被啓動,並且捕獲,您將需要SIGN_OUT之前,新的會話可開始。

現在我看到你正在測試默認色器件的行爲,要求創建第二,當它退出的第一個用戶?好的設計不這樣做,但如果這是你的應用程序需要,爲什麼不使用回調方法before_create呢?

我想這是紅,綠,重構的整體思路。