Omniauth và https
Rails
38
TIL
763
White

huydx viết ngày 10/10/2018

Lâu lắm tôi mới đụng lại vào Rails, đúng nhân dịp facebook ngừng support https cho Oauth login. Cụ thể hơn là ai login facebook với kipalog sẽ bị warning giống như dưới đây:

Lý do rất đơn giản, facebook sẽ không support cho redirect uri nào mà không phải https nữa. Kipalog hiện tại dùng omniauth gem, mà redirect uri lại được tự động tạo bởi omniauth. Tuy nhiên vấn đề là: làm thế nào để omniauth biết website của bạn đang dùng https. Đọc code của omniauth chúng ta sẽ thấy đoạn https://github.com/omniauth/omniauth/blob/master/lib/omniauth/strategy.rb#L506-L512

    def full_host
        ........
        # in Rack 1.3.x, request.url explodes if scheme is nil
        if request.scheme && request.url.match(URI::ABS_URI)
          uri = URI.parse(request.url.gsub(/\?.*$/, ''))
          uri.path = ''
          # sometimes the url is actually showing http inside rails because the
          # other layers (like nginx) have handled the ssl termination.
          uri.scheme = 'https' if ssl? # rubocop:disable BlockNesting
          uri.to_s
        else ''
        ........
      end
    end

    def callback_url
      full_host + script_name + callback_path + query_string
    end

    def ssl?
      request.env['HTTPS'] == 'on' ||
        request.env['HTTP_X_FORWARDED_SSL'] == 'on' ||
        request.env['HTTP_X_FORWARDED_SCHEME'] == 'https' ||
        (request.env['HTTP_X_FORWARDED_PROTO'] && request.env['HTTP_X_FORWARDED_PROTO'].split(',')[0] == 'https') ||
        request.env['rack.url_scheme'] == 'https'
    end

Vậy là omniauth cơ bản dựa vào rack env để phán đoán website của bạn có dùng https hay không.
Và rack sẽ dựa vào Header hay biến môi trường để quyết định việc đó. Hiện tại kipalog sử dụng nginx làm reverse proxy, do đó để thêm Header thì bạn chỉ cần thêm setting vào nginx

proxy_set_header X-Forwarded-Proto $scheme;

Và lỗi warning khó chịu của facebook sẽ biến mất.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

huydx

118 bài viết.
1234 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
219 20
Một ngày đẹp trời, bạn quyết định viết một dịch vụ web dự định sẽ làm thay đổi cả thế giới. Dịch vụ của bạn sẽ kết nối tất cả các thiết bị di động ...
huydx viết gần 2 năm trước
219 20
White
192 15
Introduction (Link) là một cuộc thi ở Nhật, và cũng chỉ có riêng ở Nhật. Đây là một cuộc thi khá đặc trưng bởi sự thú vị của cách thi của nó, những...
huydx viết 4 năm trước
192 15
White
151 15
Happy programmer là gì nhỉ, chắc ai đọc xong title của bài post này cũng không hiểu ý mình định nói đến là gì :D. Đầu tiên với cá nhân mình thì hap...
huydx viết hơn 5 năm trước
151 15
Bài viết liên quan
White
22 3
Giao diện lập trình ứng dụng, còn gọi là API (Application Programming Interface) là chương trình cho phép người dùng sử dụng các phương thức của mộ...
chuong2v viết 5 năm trước
22 3
White
0 0
Performance regression in ActiveRecord model instance creation in Rails 4.1.x When you guys met the performance issue in Rails 4.1.x. And after be...
Luu Nguyen viết 4 năm trước
0 0
White
58 31
Mở đầu Tsu.co là gì? Gần đây mình mới biết đến 1 mạng xã hội mới có tên là Tsu.co nhờ thông qua mấy bài báo trên mạng về việc "Facebook đã ra tay ...
Long Nguyen viết gần 5 năm trước
58 31
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
118 bài viết.
1234 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!