2012-04-16 62 views
10

Sau khi cố gắng "đăng nhập với Google", tôi nhìn thấy lỗi này trong các bản ghi:Thất bại/Thất bại Omniauth: Cách gỡ lỗi?

Processing by Users::OmniauthCallbacksController#failure as HTML 

tôi có thể xem tất cả các dữ liệu từ google được gửi thông qua URL (trong các bản ghi), bao gồm cả người sử dụng email và tên. Vì vậy, những gì có thể đi sai? Gọi lại của tôi thậm chí không được thực hiện. Tôi chỉ được chuyển hướng đến trang sign_in của trang web của tôi.

Và tôi khá chắc chắn mọi thứ được định cấu hình chính xác, vì điều này đã hoạt động tốt một vài tuần trước. Tôi không nghĩ rằng tôi đã thay đổi bất cứ điều gì. Đăng nhập Facebook vẫn hoạt động tốt.

Bất kỳ ý tưởng nào về cách gỡ lỗi sự cố này? Không có gì khác trong nhật ký, ngoài các URL dài có đầy đủ các tham số và giá trị. Chỉ tin nhắn INFO. Người được đăng ở trên là người duy nhất nói điều gì đó về thất bại.

CẬP NHẬT

Tôi đã thêm một phương pháp 'thất bại' với bộ điều khiển

def failure 
    render :text => params.inspect 
end 

nào dừng lại chuyển hướng, và in này:

{} 

Url là thế này:

/users/auth/google/callback?_method=post&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fud&openid.response_nonce=2012-04-16T12%3A25%3A49Z_v1fNngSQJaHBQ&openid.return_to=http%3A%2F%2Fdev.myapp.me%3A3000%2Fusers%2Fauth%2Fgoogle%2Fcallback%3F_method%3Dpost&openid.assoc_handle=AMlYA9Urw_lYamPphTSdQ9a6DU0Ez0y5RaDDM78qPL7Xgm77nMpJiB85&openid.signed=op_endpoint%2Cclaimed_id%2Cidentity%2Creturn_to%2Cresponse_nonce%2Cassoc_handle%2Cns.ext1%2Cext1.mode%2Cext1.type.ext5%2Cext1.value.ext5%2Cext1.type.ext8%2Cext1.value.ext8%2Cext1.type.ext2%2Cext1.value.ext2&openid.sig=2FPjo7U1e%2Fde248XpUgjQLduNAM%3D&openid.identity=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3DAItOawk1F5U6x_-kJnydjoww5haU41tquh1Zl2c&openid.claimed_id=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3DAItOawk1F5U6x_-kJnydjoww5haU41tquh1Zl2c&openid.ns.ext1=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0&openid.ext1.mode=fetch_response&openid.ext1.type.ext5=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffirst&openid.ext1.value.ext5=Some_User&openid.ext1.type.ext8=http%3A%2F%2Faxschema.org%2Fcontact%2Femail&openid.ext1.value.ext8=some_email%40gmail.com&openid.ext1.type.ext2=http%3A%2F%2Faxschema.org%2FnamePerson%2Flast&openid.ext1.value.ext2=Some_User 

Vì vậy, vấn đề là tất cả dữ liệu tôi cần là trong URL, nhưng đưa ra/omniauth không lấy nó (và rõ ràng đó là lý do tại sao nó gọi phương thức 'thất bại' thay vì gọi lại của tôi). Tôi không biết liệu nó có thể truy cập được thông qua mảng 'params' hay không.

Tôi cũng tò mò về phần ?_method=post, bởi vì tất cả các yêu cầu đến trang web của tôi là yêu cầu GET. Có thể nó chỉ có nghĩa là yêu cầu do omniauth thực hiện với google là POST.

Mọi suy nghĩ?

Trả lời

0

Gần đây bạn có nâng cấp đá quý của mình không? Nếu vậy, nó có thể hữu ích để so sánh omniauth và đưa ra các phiên bản với các phiên bản đá quý trước đó. Nó cũng có thể là một phụ thuộc omniauth/devise thay đổi.

Tôi không chắc chắn vấn đề là gì trong trường hợp cụ thể này, nhưng nếu bạn muốn đào sâu mã, sau đó cài đặt đá quý gỡ lỗi. Nó cung cấp cho bạn giao diện pry với các bước và các lệnh gỡ lỗi tiếp theo. Thêm pry.binding vào mã của bạn và nó sẽ dừng thực hiện trong máy chủ và hiển thị giao diện nâng lên. Ví dụ:

def failure 
    binding.pry 
    render :text => params.inspect 
end 
+2

Bạn cũng nên cho mọi người biết rằng họ sẽ cần phải cài đặt đá quý nâng lên để làm việc này https://github.com/pry/pry – Will

2

Tôi biết đây là câu hỏi cũ nhưng tôi gặp vấn đề tương tự và không có gì tôi tìm thấy trên mạng đã giúp. Hóa ra vấn đề là do tôi đã sử dụng Puma như thế nào (thực hành được đưa ra từ Thin). Tôi đã bắt đầu nhiều quá trình Puma trên cùng một máy (proxy ngược Apache) và nó xuất hiện cuộc gọi lại từ Github đã đi đến một quy trình Puma khác với yêu cầu xác thực ban đầu. Tôi lấy các quy trình Puma xuống một và không có điều kiện nữa (chuyển sang sử dụng nhân viên Puma: puma -w 5, lần lượt sử dụng các quy trình được Puma quản lý thay vì vòng xoay Apache). Đây cũng là lý do tại sao tôi không bao giờ tình cờ gặp vấn đề trong phát triển vì tôi không chạy một cụm các tiến trình trong môi trường đó.

2

Tôi nhận ra rằng đây là câu hỏi cũ và người đã hỏi hoặc giải quyết nó hoặc chuyển sang giải pháp khác, tuy nhiên, tôi gặp phải vấn đề tương tự và nhiệm vụ của tôi đã dẫn tôi tới đây.

Tôi đã giải quyết được vấn đề này, vì vậy ở đây là dành cho người tiếp theo tìm kiếm.

Hóa ra là tầm thường. Đây là những gì tôi đã có:

# config/initializers/omniauth.rb 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :github, ENV['github_key'], ENV['github_secret'] 
end 

# config/initializers/devise.rb 
Devise.setup do |config| 
    # ... devise config not related to omniauth ... 
    config.omniauth :github, ENV['github_key'], ENV['github_secret'] 
end 

Vì vậy, tôi đã định cấu hình nhà cung cấp dịch vụ omniauth ở hai nơi và xung đột.

Sau khi tôi xóa cấu hình khỏi omniauth.rb, yêu cầu chuyển hướng từ github thành /auth/github/callback bắt đầu được xử lý bởi Users::OmniauthCallbacksController#github thay vì #failure như là tình huống trước khi thay đổi.

lỗi Vì vậy, câm và rất ít thông tin để làm việc với ...

3

Để trả lời câu hỏi ban đầu về làm thế nào bạn gỡ lỗi Omniauth, dưới đây là cách để cho phép khai thác gỗ cho Omniauth. Thêm dòng này vào config/initializers/devise.rb ngay sau khi bạn xác định chiến lược Omniauth của bạn:

OmniAuth.config.logger = Rails.logger if Rails.env.development? 

(Nếu bạn không sử dụng lập mưu, chỉ Omniauth, sau đó thêm mã thay vì để config/initializers/omniauth.rb)

Bạn sẽ nhận được tải nhiều hơn thông tin từ Omniauth trong tệp nhật ký của bạn - bao gồm phản hồi đầy đủ từ giai đoạn gọi lại.

+0

Câu trả lời tuyệt vời, cảm ơn bạn. –

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