Rails 3.0.12, omniauth mới nhất, tôi có thể kết nối với Google và nhận địa chỉ email của người dùng tốt. Nhưng sau đó tôi chạy cùng đường ray ứng dụng đằng sau nginx trong chế độ SSL, và nó không thành công với trang Google:Omniauth và open_id với Google bị hỏng khi chạy sau nginx ở chế độ SSL
"The page you requested is invalid."
Có cấu hình nginx của tôi? Thiết lập omniauth của tôi?
Tôi biết X-Forwarded-Proto: https
là loại sốt đặc biệt ở đây, có bất kỳ điều gì khác tôi cần làm để có được sự cởi mở hạnh phúc phía sau máy chủ web SSL không?
Dưới đây là mã ví dụ đầy đủ: bạn có thể sao chép repo này, bundle install
và chạy rails s
để xem nó hoạt động tốt, sau đó chạy rake server
để xem lỗi. https://github.com/jjulian/open_id_ssl
nginx.conf:
worker_processes 2;
pid tmp/nginx.pid;
error_log log/error.log;
daemon off;
events {
}
http {
client_body_temp_path tmp/body;
proxy_temp_path tmp/proxy;
fastcgi_temp_path tmp/fastcgi;
uwsgi_temp_path tmp/uwsgi;
scgi_temp_path tmp/scgi;
server {
listen 3000 ssl;
ssl_certificate development.crt;
ssl_certificate_key development.key;
ssl_verify_depth 6;
access_log log/access.log;
proxy_buffering off;
location/{
proxy_pass http://127.0.0.1:3300;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto https;
}
}
}
omniauth.rb initializer:
require 'openid/store/filesystem'
Rails.application.config.middleware.use OmniAuth::Builder do
provider :open_id, :identifier => 'https://www.google.com/accounts/o8/id'
end
routes.rb:
OpenIdSsl::Application.routes.draw do
match '/auth/open_id/callback' => 'accounts#update'
match '/auth/failure' => 'accounts#failure'
root :to => 'accounts#show'
end
UPDATE: Ví dụ này sử dụng Rails 3.1. 12 và OmniAuth 1.0.3. Nâng cấp lên Rails 3.1.4 và OmniAuth 1.1.0 khắc phục sự cố.
Bạn có chắc chắn rằng Google không truy cập máy chủ của bạn không? nếu bạn đang sử dụng chứng chỉ kiểm tra, Google có thể từ chối sử dụng nó. Tôi sẽ chạy một tcpdump để kiểm tra xem có bất kỳ nỗ lực kết nối được thực hiện trước khi đi xa hơn. – Schmurfy
Google không bao giờ "truy cập" máy chủ cục bộ - ứng dụng tạo ra một chuyển hướng trình duyệt đến một url không hợp lệ. Hãy thử mã ví dụ tôi đăng, nó chạy ngay ra khỏi hộp. –