2011-12-02 32 views
12

Sau khi kết nối với ứng dụng Rails của tôi qua Facebook, tôi đã thêm # _ = _ vào URL của mình.# _ = _ được thêm vào URL bằng facebook

Tôi đã cố chỉ định redirect_uri theo quy định của FB nhưng nó không hoạt động.
Giải pháp thay thế Javascript để xóa các biểu tượng không có tác dụng. Tôi đã thử mọi thứ không có kết quả.
Bất kỳ con trỏ nào về cách giải quyết vấn đề này?

thiết lập của tôi:

gem 'rails', '3.0.11' 
gem "devise", '1.5.2' 
gem "omniauth", '1.0.1' 
gem 'omniauth-facebook', '1.0.0rc2' 

module Facebook 
CONFIG = YAML.load_file(Rails.root.join("config/facebook.yml"))[Rails.env] 
FB_APP_ID = CONFIG['app_id'] 
FB_APP_SECRET = CONFIG['secret_key'] 
end 

Rails.application.config.middleware.use OmniAuth::Builder do  
provider :facebook, Facebook::FB_APP_ID, Facebook::FB_APP_SECRET, 
:scope => 'offline_access, email, publish_stream', 
:display => 'touch' 
end 

Trả lời

14

Các #_=_ đoạn đã được cố ý thêm vào Facebook như mô tả dưới Change in Sessions Redirect Behavior. Đặt rõ ràng redirect_uri trong yêu cầu của bạn bị cáo buộc là sẽ xử lý vấn đề này, nhưng có vẻ như một lỗi vẫn tồn tại trong đoạn không mong muốn ngay cả khi redirect_uri được chỉ định.

Giả sử lỗi này không được giải quyết, một cách giải quyết có thể thay thế vị trí băm sử dụng Javascript:

window.location.hash = "" 

này không thay thế các nhân vật băm thực tế, nhưng sẽ thoát khỏi tất cả mọi thứ sau nó.

+0

thanks zeantsoi. Tôi đã chờ đợi cho điều này nhưng sửa chữa nhưng ngay bây giờ tôi thấy hiệu ứng ngẫu nhiên. tôi nhận đượC# _ = _ trong chrome nhưng không safari, mặc dù trước khi tôi đã nhận được nó trong safari quá. Tôi đang đi với giải pháp js cho bây giờ. – tomek

+0

@tomek - Có vẻ như cách khắc phục tốt nhất sẽ đến khi Facebook giải quyết lỗi, rõ ràng là trên danh sách của họ. Nếu giải thích và cách giải quyết JS là đủ cho bây giờ, bạn sẽ nhớ bỏ phiếu lên hoặc chấp nhận câu trả lời? – zeantsoi

+1

Điều này đã xóa tất cả các ký tự sau '#', nhưng người dùng được trình bày với phần dưới cùng của trang. Có cách giải quyết nào không? – paniwani

3

Có lẽ đây là câu trả lời rõ ràng hơn và câu trả lời tôi đã sử dụng để giải quyết vấn đề này.

Bạn có thể có # neo trong URL mong muốn và điều này đặc biệt đúng nếu bạn có thể được chuyển tiếp tới bất kỳ trang nào trên trang web sau khi đăng nhập facebook. Vì vậy, việc xóa mọi thứ trong # có thể gây ra sự cố.

Giải pháp này sẽ chỉ xóa facebook fubar # = chuỗi khỏi URL và để nguyên các phần còn lại của băm.

Thêm JS này vào tiêu đề hoặc JS toàn cầu của bạn bao gồm.

(function() { 
    "use strict"; 
    if (window.location && window.location.hash) { 
     if (window.location.hash === '#_=_') { 
      window.location.hash = ''; 
      return; 
     } 
     var facebookFubarLoginHash = RegExp('_\=_', 'g'); 
     window.location.hash = window.location.hash.replace(facebookFubarLoginHash,  ''); 
    } 
}()); 
Các vấn đề liên quan