Estoy jugando con el authlogic-example-app y no obtengo la dirección de correo electrónico del proveedor de OpenID (en mi caso: Google y Yahoo) cuando registro un usuario, resp. Recibo una respuesta vacía en lugar de una dirección de correo electrónico (verifique los comentarios en el código a continuación).Ruby-OpenID: que requiere dirección de correo electrónico del proveedor de OpenID
Así es como se ve mi modelo de usuario (todo lo demás se parece a la rama "with_openid" de la aplicación authlogic-example-app mencionada anteriormente). Además de la 'e-mail' que falta, la autenticación de OpenID proceso funciona como se esperaba:
class User < ActiveRecord::Base
acts_as_authentic do |c|
# not needed because I use OpenID
c.validate_login_field = false
# avoid failed validation before OpenID request
c.validate_email_field = false
# this one sets 'openid.sreg.required=email'
c.required_fields = [:email]
end
private
# overwriting the existing method in '/lib/authlogic_openid/acts_as_authentic.rb'
def map_openid_registration(registration)
# this is my problem: 'registration' is an empty hash
self.email ||= registration[:email] if respond_to?(:email) && !registration[:email].blank?
end
end
alguna idea de cómo resolver esto? ¿Alguien ha hecho esto antes de usar authlogic? O aún mejor: ¿tiene un ejemplo de trabajo?
actualización: he comprobado la Google Account Authentication API y se compara la solicitud presentada por authlogic (usando ruby-openid-gem y openid-authentication-plugin) con el example requests en los documentos de la API de autenticación de la cuenta de Google:
Ejemplo petición para autenticar a buscar dirección de correo electrónico de Google:
https://www.google.com/accounts/o8/ud
?openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select
&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select
&openid.return_to=http%3A%2F%2Fwww.example.com%2Fcheckauth
&openid.realm=http%3A%2F%2Fwww.example.com%2F
&openid.assoc_handle=ABSmpf6DNMw
&openid.mode=checkid_setup
&openid.ns.ext1=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0
&openid.ext1.mode=fetch_request
&openid.ext1.type.email=http%3A%2F%2Faxschema.org%2Fcontact%2Femail
&openid.ext1.required=email
solicitud presentada por mi appliation:
https://www.google.com/accounts/o8/ud
?openid.assoc_handle=AOQobUcdICerEyK6SXJfukaz8ygXiBqF_gKXv68OBtPXmeafBSdZ6576
&openid.ax.mode=fetch_request
&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select
&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select
&openid.mode=checkid_setup
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.ns.ax=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0
&openid.ns.sreg=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1
&openid.realm=http%3A%2F%2Flocalhost%3A3000%2F
&openid.return_to=http%3A%2F%2Flocalhost%3A3000%2Faccount%3Ffor_model%3D1%26_method%3Dpost%26open_id_complete%3D1
&openid.sreg.required=email
Mientras se depura la configuración de todo, he descubierto que el openid-authentication-plugin nunca recibe un correo electrónico en la respuesta que recibe del proveedor de OpenID, esto por lo menos explica por qué el registration
de hash en mi usuario se encuentra vacío ...
ACTUALIZACIÓN: Si usted está jugando con authlogic y openid, no se olvide de revisar la latest railscast on this subject!
Recibo errores cuando estos campos están habilitados ... método indefinido 'required_fields = 'for # ... sin ellos: # c.required_fields = ["http://axschema.org/contact/email"] # recuperar correo electrónico por sreg # c.optional_fields = ["email"] funciona. –
holden
@holden: Me dirigí a esto como respuesta al problema github que enviaste. – Javier
También podría estar interesado en este fork, que (según el README) está destinado a tratar algunas opciones de SReg versus AX: https://github.com/binaryfeed/open_id_authentication - No estoy seguro de que realmente responda a su pregunta, per se, parece relevante para el tema. – lindes