2013-03-21 15 views
9

Drodzy wspaniałych ludzi SO:omniauth google-OAuth2 z wynaleźć - invalid_credentials i "CSRF detected"

Zajmuję się tworzeniem aplikacji Ruby on Rails 3.2.12 (i nadal jestem nowy na tym).

Staram się, aby Devise współpracował z Omniauthem ... pierwszą strategią, którą próbuję, jest Google_oauth2.

Mam działa do punktu, w którym Google przekierowany z powrotem do mojego hosta lokalnego: 3000 instancji po wybraniu poświadczenia, którego chcę używać w Google.

Po tym przekierowanie z powrotem na localhost, widzę zawiadomienie lampy błyskowej:

Could not authenticate you from GoogleOauth2 because "Csrf detected".

logi serwera zawierać następująco:

Started GET "https://stackoverflow.com/users/auth/google_oauth2" for 127.0.0.1 at 2013-03-21 08:57:01 -0400 
(google_oauth2) Callback phase initiated. 
(google_oauth2) Callback phase initiated. 
(google_oauth2) Authentication failure! invalid_credentials: OmniAuth::Strategie 
s::OAuth2::CallbackError, OmniAuth::Strategies::OAuth2::CallbackError 


Started GET "https://stackoverflow.com/users/auth/google_oauth2/callback?state=7849a3762d07e7f89e69b4aa46 
7efc7b7b2c21655193396b&code=4/v-dSBwAvQUUZL87iNV_yk_Z8s_x0.cnqsdbDX4gUYaDn_6y0ZQ 
NgQ9hAaewI" for 127.0.0.1 at 2013-03-21 08:57:40 -0400 
Processing by OmniauthCallbacksController#failure as HTML 
    Parameters: {"state"=>"7849a3762d07e7f89e69b4aa467efc7b7b2c21655193396b", "cod 
e"=>"4/v-dSBwAvQUUZL87iNV_yk_Z8s_x0.cnqsdbDX4gUYaDn_6y0ZQNgQ9hAaewI"} 
Redirected to http://localhost:3000/users/sign_in 
Completed 302 Found in 0ms (ActiveRecord: 0.0ms) 

zauważyłem, że mam dokładnie ten sam wynik, gdybym wystarczy umieścić adres URL wywołania zwrotnego bezpośrednio w przeglądarce, bez podawania żadnych parametrów.

http://localhost:3000/users/auth/google_oauth2/callback 

Co mogę spróbować? Jakie inne informacje mogę podać?

+0

Jakieś rozwiązanie tego samego błędu w GitLab? http://stackoverflow.com/questions/42290769/gitlab-could-not-authenticate-you-from-googleoauth2-because-csrf-detected-erro –

Odpowiedz

11

Odpowiadając na mój własny wpis .... Przeszłam to. Nie jestem do końca pewien, dlaczego, ale mam pewne wskazówki, które mogą być warte przekazania.

Istnieje kilka innych podobnych problemów zgłoszonych w związku ze strategią omniauth-facebook. Wydaje się, że nie odnoszą się do google, więc nie wyglądałem zbyt głęboko. Potem próbowałem skonfigurować strategię FB i dostałem ten sam problem. Rozwiązaniem FB było przywrócenie klejnotu omniauth-facebook z powrotem do wersji 1.4.0.

gem 'omniauth-facebook', '1.4.0' 

to również automatycznie przywrócone gem omniauth-OAuth2 (I już nie owinięty wokół głowy rzeczy gem jeszcze). Kiedy ponownie wypróbowałem link google, nie wyrzucił tego samego komunikatu Csrf ... Hmmm ... przywracając klejnot FB do naprawienia google ---- Potrzebuję zrzeczenia się tutaj, inne rzeczy mogły być tutaj problemem, ale ja myślę, że mam to poprawnie.

Jest jeszcze jeden problem, o którym warto wspomnieć. Podany powyżej dziennik zawierał 2 powtarzające się komunikaty dziennika ....

(google_oauth2) Callback phase initiated. 
(google_oauth2) Callback phase initiated. 

To ujawnia inny (być może powiązany) problem. Oznacza to, że wywołanie zwrotne zostało wykonane dwukrotnie. Po przejściu przez problem CSRF, zacząłem samodzielnie problem z invalid_credentials. Przyczyną błędu jest zduplikowane wywołanie zwrotne. Wygląda na to, że Oauth2 zezwala tylko na jednorazowe użycie poświadczeń. Drugie użycie jest nieprawidłowe.

użyłem railscast nr 235 jako moim przewodnikiem: http://railscasts.com/episodes/235-devise-and-omniauth-revised?autoplay=true

Miał mi dodać „usługodawca” wywołuje w inicjalizatorze omniauth.rb. i wywołania config.omniauth w inicjatorze devise.rb. Sądzę, że w jakiś sposób powodują one duplikowanie zwrotów?!?!?

Usunięcie wpisu z omniauth.rb spowodowało, że minęłem ten.

Więc już go masz. Moje drugie pytanie na SO i moje drugie pytanie, w którym jestem jedynym respondentem. Nie jestem pewien, czy to dlatego, że byli głupi czy twardo ... Mam nadzieję, że to drugie.

+0

Cóż, mój przyjacielu, możesz być bardziej spokojny, nikt nie odpowiedział ponieważ ten problem jest naprawdę trudny! Mam teraz te same problemy z Google, Linkedinem i Twitterem :(Mówisz, że muszę usunąć linię z omniauth.rb, prawda? Jestem trochę spieprzony, ja nie mam plik, co wtedy? – jlstr

+0

mój plik omniauth.rb znajduje się w nieznanym miejscu ... config/initializers/omniauth.rb. Jeśli go nie masz, po prostu rozejrzę się za innymi możliwymi duplikatami? – Doug

+3

Usuwanie działa omniauth.rb Miałem ten sam problem po RailsCast, ale gdy podążam za [przewodnikiem po wiki Devise] (https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview), konfigurujesz tylko OmniAuth w config/initializers/devise.rb z 'config.omniauth: facebook," APP_ID "," APP_SECRET ",: strategy_class => OmniAuth :: Strategies :: Facebook'. –

4

Natknęłam się na ten problem, ale twoja poprawka nie zadziałała. Używam następujących wersji klejnotów;

oauth2 (0.8.1) 
omniauth (1.1.4) 
omniauth-oauth2 (1.1.1) 
omniauth-facebook (1.4.1) 
omniauth-google-oauth2 (0.2.1) 

Co nie rozwiązać mój problem został regulującą mój omniauth.rb initialiser do następujących elementów;

OmniAuth.config.full_host = "http://localhost:3000" 

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, KEY, SECRET, 
    provider :google_oauth2, KEY, SECRET, :scope => "userinfo.email,userinfo.profile" 
end 

Kluczowym elementem było dodać parametr „Zakres” dla google_oauth2, bez którego byłem coraz awarie auth.

oparłem zainstalowania tego bloga: http://sreeharikmarar.blogspot.com.au/2013/01/omniauth-devise-authentication-using.html

powiązanej wpis: OmniAuth using google oauth 2 strategy scope failure

4

miałem ten sam problem. W moim przypadku zainicjowałem dane logowania google-oauth zarówno w devise.rb, jak i w omniauth.rb; z tego powodu wywołanie zdarzało się dwukrotnie. Po usunięciu danych logowania google-oauth z devise.rb problem tokenu CSRF został rozwiązany.

+0

pracował dla mnie też ... Usunięto wpis w devise.rb –

Powiązane problemy