Rails 3.0.12, il più recente omniauth, posso collegarmi a Google e ottenere l'indirizzo email dell'utente correttamente. Ma poi ho eseguito, che lo stesso rotaie app dietro nginx in modalità SSL, e non riesce con la pagina di Google:Omniauth e open_id con Google si sono interrotti quando si è eseguito dietro nginx in modalità SSL
"The page you requested is invalid."
E 'la mia nginx config? La mia configurazione di omniauth?
So che lo X-Forwarded-Proto: https
è la salsa speciale qui, c'è qualcos'altro che devo fare per ottenere l'openid felice dietro un server web SSL?
Ecco il codice di esempio completo: è possibile clonare questo repository, bundle install
ed eseguire rails s
per vederlo funzionare correttamente, quindi eseguire rake server
per vederlo fallire. 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 inizializzatore:
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: Questo esempio utilizzato Rails 3.1. 12 e OmniAuth 1.0.3. L'aggiornamento a Rails 3.1.4 e OmniAuth 1.1.0 risolve il problema.
Sei sicuro che Google non colpisca il tuo server? se stai usando un certificato di prova, forse Google rifiuta di usarlo. Vorrei eseguire un tcpdump per verificare se è stato effettuato un tentativo di connessione prima di andare oltre. – Schmurfy
Google non "colpisce" mai il server locale - l'app genera un reindirizzamento del browser a un URL non valido. Prova il codice di esempio che ho pubblicato, viene eseguito immediatamente. –