2013-02-20 38 views
10

Hiện tại omniauth-facebook dường như có một số vấn đề, và tôi muốn biết nếu có ai có câu trả lời cho họ.Rails omniauth-facebook chưa giải quyết vấn đề

Vấn đề đầu tiên là thông tin đăng nhập không hợp lệ. Tôi không thể đăng nhập vào ứng dụng của mình bằng ủy quyền phía máy khách vì vấn đề này. Tuy nhiên, điều này có thể được giải quyết bằng cách hạ cấp facebook-omniauth xuống phiên bản 1.4.0. (reference)

Tuy nhiên, bây giờ tôi đang gặp phải vấn đề thứ hai, NoAuthorizationCodeError, với thông báo lỗi:

OmniAuth Strategies Facebook NoAuthorizationCodeError 
(must pass either a `code` parameter or a signed request 
(via `signed_request` parameter): 

này đã được hỏi trong here, nhưng câu trả lời chấp nhận lời khuyên để thực sự nâng cấp -1,4 .1 phiên bản một lần nữa, mà sẽ làm cho các vấn đề thông tin đăng nhập không hợp lệ trước đó xảy ra một lần nữa. Vì vậy, đây không phải là một lựa chọn cho tôi.

NoAuthorizationCodeError xảy ra khi tôi cố gắng đăng nhập vào ứng dụng của mình bên trong Facebook iFrame (tìm kiếm ứng dụng của tôi từ trung tâm ứng dụng) qua internet explorer. Mọi thứ hoạt động tốt trên chrome hoặc firefox. Ngoài ra còn có một số github issue xác định chính xác vấn đề này, nhưng chưa có ai đưa ra câu trả lời. Tôi cũng đã cố gắng hạ cấp xuống phiên bản omniauth-facebook 1.3.0, nhưng nó không có sự khác biệt. Tôi cũng đã cố gắng để vượt qua trong tham số signed_request như sau:

window.location = '/auth/facebook/callback', 
{ signed_request: response.authResponse.signedRequest } 

Tuy nhiên, nó đã không thực hiện bất kỳ sự khác biệt (trên IE, lỗi vẫn còn tồn tại), và tôi không chắc chắn nếu đó là đúng cách để chuyển vào mã dưới dạng tham số (làm cách nào để kiểm tra?)

Tôi cho rằng không có vấn đề gì với cài đặt của mình. Tôi thực sự đánh giá cao sự giúp đỡ về vấn đề này.

UPDATE:

tôi nâng cấp lên phiên bản 1.4.1 mà không cần phải thông tin không hợp lệ vấn đề, nhưng NoAuthorizationCodeError vẫn xảy ra khi tôi truy cập ứng dụng bên trong Facebook thông qua trình duyệt Internet Explorer. Kiểm tra Github issue của tôi.

UPDATE:

tôi hạ cấp xuống phiên bản 1.4.0 và thêm params signedRequest.

<script> 
function login() { 
    FB.login(function(response) { 
    if (response.authResponse) { 
     window.location = '/auth/facebook/callback?' + $.param({ signed_request: response.authResponse.signedRequest }) 
    } 
    }, {scope: 'email,publish_stream,publish_actions'}); 
} 
</script> 

Không có lỗi hoặc cảnh báo trong nhật ký và mọi thứ hoạt động như mong đợi. Tuy nhiên, nếu tôi đăng nhập trong Facebook iFrame thông qua trình khám phá internet, nó không đăng nhập tôi ngay cả sau khi giai đoạn gọi lại được bắt đầu. Tôi đoán vấn đề ban đầu đã được giải quyết nhưng tôi không thể tìm ra cách gỡ lỗi này khi không có bất kỳ loại thông báo lỗi nào.

Sự cố: Khi tôi nhấp "đăng nhập bằng Facebook" bên trong Facebook iFrame cho ứng dụng của tôi bằng Internet Explorer, tôi KHÔNG đăng nhập khi quá trình ủy quyền hoàn tất. Vấn đề này chỉ xảy ra trong môi trường cụ thể đó, và tôi đã có thời gian khó cố gắng tìm ra lý do tại sao.

2013-02-22T01:10:40+00:00 app[web.1]: Started GET "/auth/facebook/callback?signed_request=LONGSTRING" for 200.1.102.103 at 2013-02-22 01:10:40 +0000 
2013-02-22T01:10:40+00:00 app[web.1]: (facebook) Callback phase initiated. 
2013-02-22T01:10:40+00:00 app[web.1]: Processing by SessionsController#create_facebook as HTML 
2013-02-22T01:10:40+00:00 app[web.1]: Parameters: {"signed_request"=>"LONGSTRING", "provider"=>"facebook"} 
2013-02-22T01:10:40+00:00 app[web.1]: User Load (1.6ms) SELECT "users".* FROM "users" WHERE "users"."provider" = 'facebook' AND "users"."uid" = 'MYUID' LIMIT 1 
2013-02-22T01:10:40+00:00 app[web.1]: (0.8ms) BEGIN 
2013-02-22T01:10:40+00:00 app[web.1]: User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE ("users"."name" = 'MYNAME' AND "users"."id" != 3) LIMIT 1 
2013-02-22T01:10:40+00:00 app[web.1]: (0.9ms) COMMIT 
2013-02-22T01:10:40+00:00 app[web.1]: Redirected to http://MYAPP.COM 
2013-02-22T01:10:40+00:00 app[web.1]: Completed 302 Found in 10ms (ActiveRecord: 4.2ms) 

Một lần nữa, trong bất kỳ ủy quyền môi trường nào khác hoạt động hoàn hảo trong tất cả các trình duyệt. Vấn đề này chỉ xảy ra khi tôi cố gắng đăng nhập trong Facebook thông qua Internet Explorer.

Môi trường của tôi: omniauth-facebook 1.4.0, omniauth 1.1.1, 0.8.0 OAuth2, Rails 3.2.11

tôi cố ý hạ omniauth-facebook từ 1.4.1 đến 1.4.0 vì số thông tin đăng nhập không hợp lệ trong phiên bản mới nhất.

+0

Tôi cũng phải đối mặt với cùng một vấn đề, sau khi tôi hạ cấp đá quý omniauth-facebook thành vấn đề phiên bản 1.4.0 được giải quyết. – prabu

Trả lời

0

fastcatch nêu tại this SO gửi với sự giúp đỡ của getting-more-information-from-omniauth-exceptions nói rằng,

... OmniAuth strategies [...], if they encounter a problem, call the method fail! and pass in a symbol describing the problem like :invalid_credentials and the exception they encountered. The fail! method ends up calling OmniAuth.config.on_failure and passing in the Rack environment (after doing a few other things like sticking the exception into the environment...

+0

Cảm ơn @saurabh, nhưng điều này không hoàn toàn giải quyết được vấn đề đã nêu. Tôi đã biết thông tin này rồi. –

1

làm sử dụng omniauth (1.1.3), OAuth2 (0.8.1) và omniauth-facebook (1.4. 1).

Bạn sẽ không nhận được bất kỳ lỗi với những

0

Bởi vì bạn chỉ nhìn thấy vấn đề này trong Internet Explorer khi sử dụng một khung nội tuyến, nó có thể là một vấn đề P3P.

Xem http://www.slideshare.net/cmercier/things-i-learned-writing-a-facebook-canvas-appCookie blocked/not saved in IFRAME in Internet Explorer:

Internet Explorer cho cấp dưới của niềm tin vào các trang web IFRAME (IE gọi điều này là "bên thứ ba" nội dung). Nếu trang bên trong IFRAME không có Chính sách bảo mật, cookie của nó bị chặn (được biểu thị bằng biểu tượng con mắt trên thanh trạng thái, khi bạn nhấp vào nó, nó sẽ hiển thị cho bạn danh sách các URL bị chặn). ... Trong trường hợp này, khi cookie bị chặn, số nhận dạng phiên không được gửi và tập lệnh đích sẽ phát ra lỗi 'phiên không tìm thấy'.

Hãy thử thêm đá quý rack-p3p và xem nó có hữu ích không!

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