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)
Bất kỳ giải pháp nào cho vấn đề này? Bạn có tìm được gì không? –
Không, vẫn bị kẹt. – joshwa
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