2013-03-21 36 views
9

Thưa Fine dân SO:omniauth google-OAuth2 với devise - invalid_credentials và "CSRF phát hiện"

Tôi đang phát triển một ứng dụng Ruby on Rails 3.2.12 (và tôi vẫn còn mới đến nó).

Tôi đang cố gắng tìm Devise làm việc với Omniauth ... chiến lược đầu tiên tôi đang thử là Google_oauth2.

Tôi có nó hoạt động đến điểm mà Google đã chuyển hướng trở lại vào máy chủ cục bộ của tôi: 3000 trường hợp sau khi chọn thông tin xác thực tôi muốn sử dụng trong Google.

Sau khi chuyển hướng này trở lại vào localhost, tôi nhìn thấy một thông báo flash:

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

Nhật ký máy chủ chứa này:

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) 

tôi nhận thấy rằng tôi nhận được chính xác kết quả tương tự nếu tôi chỉ cần đặt URL gọi lại trực tiếp vào trình duyệt mà không có bất kỳ tham số nào được cung cấp.

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

Tôi có thể thử gì? Tôi có thể cung cấp thông tin nào khác?

+0

Bất kỳ giải pháp nào cho cùng một lỗi trong GitLab? http://stackoverflow.com/questions/42290769/gitlab-could-not-authenticate-you-from-googleoauth2-because-csrf-detected-erro –

Trả lời

11

Trả lời bài đăng của riêng tôi .... Tôi đã qua quá trình này. Tôi không hoàn toàn chắc chắn tại sao, nhưng tôi có một số manh mối có thể đáng để vượt qua.

Có một loạt các sự cố tương tự khác được báo cáo liên quan đến chiến lược omniauth-facebook. Họ dường như không áp dụng cho google, vì vậy tôi không nhìn quá sâu. Sau đó, tôi đã cố gắng để cấu hình chiến lược FB, và có cùng một vấn đề. Giải pháp FB là để hoàn nguyên đá quý omniauth-facebook trở lại 1.4.0.

gem 'omniauth-facebook', '1.4.0' 

Điều này cũng tự động hoàn nguyên đá quý omniauth-oauth2 (Tôi chưa bọc đầu xung quanh thứ đá quý). Khi tôi thử liên kết google một lần nữa, nó đã không ném cùng một thông điệp được phát hiện Csrf ... Hmmm ... quay lại đá quý FB cố định google ---- Cần một tuyên bố từ chối ở đây, những thứ khác có thể là vấn đề ở đây, nhưng tôi nghĩ rằng tôi có nó đúng.

Có một vấn đề khác đáng nói đến. Nhật ký i được cung cấp ở trên cho thấy 2 thông điệp tường trình lặp lại ....

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

Điều này cho thấy vấn đề khác (có thể có liên quan). Nó có nghĩa là gọi lại được thực hiện hai lần. Một khi tôi đã vượt qua vấn đề CSRF, tôi bắt đầu nhận được tất cả vấn đề invalid_credentials. Lý do cho lỗi là cuộc gọi lại trùng lặp. Rõ ràng, Oauth2 chỉ cho phép sử dụng một lần chứng chỉ. Cách sử dụng thứ hai không hợp lệ.

tôi đã sử dụng railscast # 235 như hướng dẫn của tôi: http://railscasts.com/episodes/235-devise-and-omniauth-revised?autoplay=true

Nó đã cho tôi thêm "nhà cung cấp" các cuộc gọi trong initializer omniauth.rb. và config.omniauth gọi trong bộ khởi tạo devise.rb. Tôi đoán bằng cách nào đó dẫn đến lặp lại gọi lại?!?!?

Xóa mục nhập khỏi omniauth.rb khiến tôi vượt qua mục nhập đó.

Vì vậy, bạn có nó. Câu hỏi thứ hai của tôi, và câu hỏi thứ hai của tôi, nơi tôi là người trả lời duy nhất. Không chắc chắn nếu nó của họ là câm hoặc cứng ... Tôi hy vọng sau này.

+0

Vâng, bạn tôi, bạn có thể yên tâm hơn, không ai trả lời bởi vì vấn đề này thực sự khó! Tôi cũng đang gặp vấn đề tương tự, với Google, Linkedin và Twitter: (Vì vậy, bạn nói rằng tôi phải xóa một dòng khỏi omniauth.rb, phải không? Tôi hơi say, tôi không có tập tin đó, những gì sau đó? – jlstr

+0

tập tin omniauth.rb của tôi là ở một nơi tối tăm ... config/initializers/omniauth.rb.Nếu bạn không có nó, tôi chỉ cần nhìn xung quanh cho các bản sao có thể khác? – Doug

+3

Loại bỏ Tôi đã gặp vấn đề tương tự sau RailsCast. Nhưng khi làm theo [hướng dẫn trên trang wiki Devise] (https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview), bạn chỉ định cấu hình OmniAuth trong config/initializers/devise.rb với 'config.omniauth: facebook," APP_ID "," APP_SECRET ",: strategy_class => OmniAuth :: Chiến lược :: Facebook'. –

4

Chỉ cần vấp vào vấn đề này, nhưng bản sửa lỗi của bạn không hiệu quả đối với tôi. Tôi đang sử dụng các phiên bản đá quý sau;

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

đã khắc phục vấn đề của tôi đã được điều chỉnh initialiser omniauth.rb của tôi như sau;

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 

Phần quan trọng là thêm tham số 'phạm vi' cho google_oauth2 mà không bị lỗi.

tôi cài đặt dựa trên của blog này của tôi: http://sreeharikmarar.blogspot.com.au/2013/01/omniauth-devise-authentication-using.html

Một bài liên quan: OmniAuth using google oauth 2 strategy scope failure

4

tôi đã cùng một vấn đề. Trong trường hợp của tôi, tôi đã khởi tạo thông tin đăng nhập google-oauth trong cả hai devise.rb và cũng có trong omniauth.rb; bởi vì điều này gọi lại đã xảy ra hai lần. Sau khi xóa thông tin đăng nhập google-oauth khỏi devise.rb, sự cố mã thông báo CSRF này đã được giải quyết.

+0

đã hoạt động cho tôi nữa. Đã xóa mục nhập trong devise.rb –

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