2015-04-12 14 views
46

Tôi có một kịch bản hoạt động tốt khi tôi đang sử dụng omniauth thực, nhưng không thành công khi tôi chạy nó với xác thực giả trong dưa chuột/capybara.Chuyển hướng gọi lại không giữ lại phiên

Trong gọi lại, khi tôi làm sign_in @user, nó tạo thành công người dùng và nhật ký ... current_user được đặt. Nhưng khi tôi thực hiện redirect_to request.env['omniauth.origin'] || '/', bên trong hành động tiếp theo, current_user hiện là không.

Tôi đã xác nhận qua ảnh chụp màn hình/tạm dừng trình duyệt không hoạt động với xác thực giả. Lỗi tương tự xảy ra trong trình điều khiển firefox và chrome.

Bất kỳ ý tưởng nào về việc tại sao điều này sẽ xảy ra?

/features/support/env.rb:

Cucumber::Rails::Database.javascript_strategy = :truncation 

Kịch bản:

@javascript 
Scenario: 
    Given I am on the home page 
    When I press "Login" 
    And I should see "Login with Twitter" in the selector "#login-modal" 
    Given Omniauth returns a user with provider "twitter" and uid "1" and nickname "foo"  
    When I login with Twitter 
    Then I should be logged in as "foo" 

Bước Định nghĩa:

Given(/^Omniauth returns a user with provider "(.*?)" and uid "(.*?)" and nickname "(.*?)"$/) do |provider, uid, nickname| 
    OmniAuth.config.test_mode = true 

OmniAuth.config.add_mock(provider.to_sym, { 
    :uid => uid, 
    :info => { 
     :name => nickname 
    } 
    }) 
end 

Then(/^I should be logged in as "(.*?)"$/) do |nickname| 
    expect(page).to have_content(nickname) 
end 

Auth callback:

def twitter 
    @user = User.from_omniauth(request.env["omniauth.auth"]) # this works-- I get the mock 
    sign_in @user 
    puts ">> in auth callback: just signed in user #{current_user.id}"   
    redirect_to request.env['omniauth.origin'] || '/' 
end 

Bộ điều khiển:

def new 
    puts ">> in my_controller#new: current_user = #{current_user.id if current_user}" 
end 

Dưa chuột Output:

Given Omniauth returns a user with provider "twitter" and uid "1" and nickname "foo" 
>> in auth callback: just signed in user 1 
>> in my_controller#new: current_user = 
When I login with Twitter                 
Then I should be logged in as "foo"             
    expected to find text "foo" in [redacted] (RSpec::Expectations::ExpectationNotMetError) 
+0

Bất kỳ giải pháp nào cho vấn đề này? Bạn có tìm được gì không? –

+0

Không, vẫn bị kẹt. – joshwa

+0

cũng xin vui lòng xem xét các tiêu đề của yêu cầu cho thực tế và cho giả, có thể là bạn nên thêm một cái gì đó trong mô hình – ikirachen

Trả lời

1

Bạn đang nhận được người sử dụng và thu thập nó để mới biến @user nhưng trong khi bạn đang gọi phương thức sign_in một lần nữa bạn đã khởi tạo người dùng biến mới với sử dụng (ví dụ: @user)

Các vấn đề liên quan