5

Tôi quan tâm đến việc học xác thực omniauth với đường ray vì vậy tôi đã kiểm tra hướng dẫn khác nhau, trong đó cũng chứa railscast # 360.Rails - Omniauth-facebook app_id cần lỗi

Khi tôi tạo ra ứng dụng của riêng tôi với developers.facebook.com, nó tạo ra một app_id và bí mật đối với tôi. Tôi thiết lập các ứng dụng trực tuyến và tạo ra một ứng dụng đường ray cơ bản mà chỉ sử dụng các bước trong hướng dẫn Ryan Bates.

Đây là tập tin omniauth.rb tôi mà tạo ra những lỗi mà tôi đang recieving,

OmniAuth.config.logger = Rails.logger 

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, ENV['875829959136178'], ENV['<app_secret>'] 
end 

Tôi đã cố gắng sử dụng

provider :facebook, ENV['FACEBOOK_875829959136178'], ENV['FACEBOOK_<app_secret>'] 

cũng có.

Khi tôi gọi http://localhost:3000/auth/facebook, tôi nhận được lỗi cho biết "tham số app_id là bắt buộc".

Làm cách nào tôi có thể vượt qua lỗi này,

Trả lời

11

Có vẻ như bạn hiểu nhầm ENV là gì. ENV[xxx] là một phương pháp ruby ​​mà lấy giá trị cho biến môi trường xxx. Vì vậy, ENV['875829959136178'] trong đoạn mã của bạn cố gắng để lấy lại giá trị cho biến môi trường 875829959136178. Nó rất có khả năng là bạn chưa thiết APP_ID của bạn vào biến môi trường 875829959136178, và do đó lợi nhuận ENV['875829959136178'] Nil. provider là một phương thức lấy app_id và app_secret, nhưng vì bạn đang đưa ra số không dưới dạng app_id, đó là tuyên bố rằng app_id không được cung cấp mặc dù nó được yêu cầu.

Giả sử app_id của bạn là 875829959136178 và app_secret của bạn là APP_SECRET. Cách dễ nhất để làm cho ứng dụng của bạn hoạt động là cung cấp cho chúng dưới dạng Chuỗi.

provider :facebook, "875829959136178", "APP_SECRET" 

Bạn cần lưu ý rằng id ứng dụng và bí mật trong mã nguồn là văn bản thuần túy không mong muốn từ quan điểm bảo mật. Bạn nên dựa vào cách đặt biến môi trường bằng cách đọc các bài viết như this hoặc sử dụng đá quý như dotenv.

+0

Một lời giải thích tuyệt vời :) Cảm ơn rất nhiều. sẽ dựa vào các biến env Noe đúng :) –