2015-04-12 20 views
46

Gerçek omniauth kullanıyorum, ancak salatalık/capybara içinde alaycı auth ile çalıştırdığınızda başarısız olan bir senaryo var.Geri arama yönlendirmesi oturumu korumalı değil

Geri aramada, sign_in @user yaptığımda, başarıyla kullanıcı oluşturur ve oturum açar ... current_user ayarlanır. Ama daha sonra redirect_to request.env['omniauth.origin'] || '/' yaptıktan sonra, aşağıdaki eylemin içinde, current_user şimdi nil.

Ekran görüntüleri ile/tarayıcıyı mock auth ile çalışmadığı halde duraklattığımı doğruladım. Aynı hata firefox ve chrome sürücülerinde de oluşur.

Bunun neden olabileceği hakkında bir fikriniz var mı?

/features/support/env.rb:

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

Senaryo:

@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" 

Adım Tanımlar:

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 geri arama:

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 

Denetleyici:

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

Salatalık Çıktı:

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

Bu soruna bir çözüm var mı? Bir şey buldun mu? –

+0

Hayır, hala takılı. – joshwa

+0

de lütfen gerçek ve sahte için isteğin başlığını gözden geçirin, sahte bir şey eklemelisiniz – ikirachen

cevap

1

tekrar size yeni değişken kullanıcıyı başlatmak vermedi sign_in yöntemini çağırarak aktarılırken kullanıcıyı alma ve yeni değişken @user bunu toplayarak ancak kullanarak (örn. @user)