2011-12-05 28 views
5

Tôi có một ứng dụng sử dụng Facebook độc quyền làm nhà cung cấp để xác thực và đã thiết lập chính xác cuộc gọi lại cho chế độ sản xuất. Để làm việc này, bạn cung cấp ứng dụng Facebook của mình với URL trang web và tên miền trang web cho các cuộc gọi lại và trong trường hợp của tôi là http://appname.heroku.comappname.heroku.com tương ứng.Cách xử lý cuộc gọi lại OmniAuth trong nhiều môi trường?

Sự cố là bộ điều khiển của tôi được thiết lập để chỉ cho phép phiên được xác thực vì vậy tôi không thể xem ứng dụng của mình ở chế độ phát triển vì miền ứng dụng Facebook rõ ràng chưa được đặt thành localhost.

Làm cách nào để giải quyết vấn đề này mà không phải thay đổi cài đặt này trong cài đặt của Facebook?

+0

tạo một ứng dụng facebook khác để phát triển với miền localhost: 3000 –

Trả lời

10

Tạo một ứng dụng một facebook với miền localhost:3000 cho sự phát triển và tạo config.yml trong thư mục config

development: 
    facebook_api_key: 656756786867868 
    facebook_api_secret: 4sdffdh6u345436 

production: 
    facebook_api_key: 45778799 
    facebook_api_secret: fghjkbbcbcbcbcb 

Bây giờ thêm load_config.rb vào thư mục initializers

# load config 
AppConfig = YAML.load_file(Rails.root.join('config', 'config.yml')) 

# Override config options by correct environment 
env_options = AppConfig.delete(Rails.env) 

AppConfig.merge!(env_options) unless env_options.nil? 

Và cuối cùng thêm video này vào số omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, AppConfig['facebook_api_key'], AppConfig['facebook_api_secret']   
end 

Nó sẽ lấy chìa khóa của bạn tùy thuộc vào môi trường đường ray. Đó là tất cả, hy vọng nó sẽ giúp bạn.

+0

Khá một giải pháp rõ ràng. Cảm ơn – Simpleton

+0

Nhân tiện, miền không thể là localhost: 3000 vì Facebook sẽ không chấp nhận điều đó. URL phải là http: // localhost: 3000 và tên miền là localhost.local với tệp máy chủ của tôi được đặt thành 127.0.0.1 localhost.local – Simpleton

+1

Tôi có vài ứng dụng phát triển với máy chủ lưu trữ 'http: // localhost: 3000 /' và miền 'localhost'. Tất cả chỉ hoạt động tốt –

10

Tại sao không chỉ cần tạo ENV [] biến trong các tập tin môi trường và sử dụng chúng như thế này trong initializer của bạn:

provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK'] 
provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET'] 

Có vẻ như dễ dàng hơn nhiều (và ngắn hơn) đối với tôi.

+0

Có, nhưng tôi không thích giải pháp này, nó chỉ không 'sạch' đủ cho tôi. –

+3

Tính năng này an toàn hơn việc có khóa trong tệp văn bản mà bạn tải lên máy chủ. – iain

+3

Đây là một giải pháp tốt để mật khẩu của bạn không được lưu trữ trong điều khiển phiên bản. [Heroku] (https://devcenter.heroku.com/articles/config-vars) cũng dễ dàng làm như vậy: 'heroku config: thêm FACEBOOK_KEY = abc123xyz' – Andrew

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