我正在玩
authlogic-example-app,当我注册一个用户时,我没有从OpenID提供商(在我的情况下是Google和Yahoo)获取电子邮件地址.我收到一个空的响应,而不是一个电子邮件地址(请查看下面的代码中的注释).
这就是我的用户模型看起来像(其他一切看起来像上面提到的authlogic-example-app的“with_openid”-branch).除了缺少的“电子邮件”之外,openid-authentication-process也按预期工作:
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
任何想法如何解决这个问题?使用authlogic之前有人在这里做过吗?甚至更好:你有一个工作的例子吗?
更新:我查看了Google Account Authentication API,并将authlogic(使用ruby-openid-gem和openid-authentication-plugin)提交的请求与Google Account Authentication API文档中的example requests进行了比较:
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
我的申请提交的请求:
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
在调试整个设置时,我发现openid-authentication-plugin从来没有收到来自openid提供商的响应中的电子邮件,这至少解释了为什么我的用户模型中的注册哈希为空…
更新:如果你正在玩authlogic和openid,不要忘了看看latest railscast on this subject!
解决方法
没有人可以帮助我,我帮助了自己.