Rails 3.0.12, новейший omniauth, я могу подключиться к Google и просто получить адрес электронной почты пользователя. хорошо. Но затем я запускаю то же самое приложение rails за nginx в режиме SSL, и оно не работает со страницей Google:
"The page you requested is invalid."
Это моя конфигурация nginx? Мои настройки omniauth?
Я знаю X-Forwarded- Proto: https
— это особый соус, есть ли что-нибудь еще, что мне нужно сделать, чтобы openid был счастлив за веб-сервером SSL?
Вот полный пример кода: вы можете клонировать этот репозиторий, установка пакета
и запустите rails s
, чтобы убедиться, что он работает нормально, затем запустите rake server
, чтобы увидеть, что он не работает.
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:
require 'openid/store/filesystem'
Rails.application.config.middleware.use OmniAuth::Builder do
provider :open_id, :identifier => 'https://www.google.com/accounts/o8/id'
end
route.rb:
OpenIdSsl::Application.routes.draw do
match '/auth/open_id/callback' => 'accounts#update'
match '/auth/failure' => 'accounts#failure'
root :to => 'accounts#show'
end
ОБНОВЛЕНИЕ: В этом примере использовался Rails 3.1. 12 и OmniAuth 1.0.3. Обновление до Rails 3.1.4 и OmniAuth 1.1.0 устраняет проблему.