2012-10-28 28 views
6

Tôi muốn biết nhà cung cấp nào đã được tải để sử dụng bởi OmniAuth gem. Tôi đã thử điều này:Tìm nhà cung cấp đã tải cho OmniAuth

OmniAuth::Strategies.constants # a method provided by the standard lib Module class 
# => [:Developer, :OAuth, :Twitter] 

và điều này:

OmniAuth.strategies.inspect # a method provided by the OmniAuth class, but which has no documentation or comments around it. 
# => [OmniAuth::Strategies::OAuth] 

Câu trả lời tôi mong đợi (hoặc muốn) là [:Developer, :Twitter] như trong mã kiểm tra của tôi, tôi đã chỉ nạp twitter một cách rõ ràng, và nhà phát triển được cung cấp được tải theo mặc định.

(Đây là tất cả nên một thư viện khác nhau có thể tải những điều đúng cho nó hoạt động, phụ thuộc vào những gì OmniAuth đang chạy.)

Nếu có một cách và bạn biết về nó, xin vui lòng cho tôi biết. Nếu không, tôi sẽ thực dụng và loại bỏ OAuth ra khỏi danh sách từ ví dụ đầu tiên.

Ruby là 1.9.3 và OmniAuth là v1.1.1

Trả lời

6

OmniAuth :: Chiến lược liệt kê các chiến lược có sẵn và đã đăng ký. Không phải những người đang trong 'sử dụng'. Nếu bạn khai thác mã của OmniAuth builder, bạn sẽ thấy rằng các chiến lược khác nhau được chuyển vào Rack bằng cách sử dụng use làm phần mềm trung gian trong khối nhà cung cấp, điều này làm cho việc theo dõi các chiến lược khó khăn hơn. Một cách tiếp cận "thực dụng" khác là khỉ vá OmniAuth Builder và theo dõi các nhà cung cấp.

module OmniAuth 
    class Builder < ::Rack::Builder 
    def provider_patch(klass, *args, &block) 
     @@providers ||= [] 
     @@providers << klass 
     old_provider(klass, *args, &block) 
    end 
    alias old_provider provider 
    alias provider provider_patch 
    class << self 
     def providers 
     @@providers 
     end 
    end 
    end 
end 

Bao gồm bản vá này trước khi định cấu hình nhà cung cấp của bạn. Khi tất cả các nhà cung cấp đã được tải, OmniAuth::Builder.providers sẽ cung cấp cho bạn mảng bạn muốn.

Mặc dù chiến lược của Nhà phát triển khả dụng nhưng không được tải. Nó chỉ được tải nếu bạn chỉ định

provider :developer 
+0

Cảm ơn đã dành thời gian với điều này, nó rất hữu ích và nhiều đánh giá cao. – iain

15

Thêm mục này vào đây để tìm người dùng, vì tôi cần danh sách tương tự như iain.

Tôi đã thử sử dụng câu trả lời được chấp nhận ở đầu bộ tạo khởi tạo của tôi trong dự án Rails, nhưng tôi gặp lỗi (@@ provider không được xác định).

Sau khi xem xét mã nguồn lập mưu, tôi đã sử dụng sau đây để có được một loạt các biểu tượng:

Devise.omniauth_configs.keys # => [:facebook, :twitter] 
+6

Bạn cũng có thể sử dụng Devise.omniauth_providers –

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