私はauthlogic-example-appで遊んでいますが、私はOpenIDプロバイダ(私の場合はGoogleとYahoo)から電子メールアドレスを取得できません。 resp。私は電子メールアドレスの代わりに空の応答を得ます(下記のコードのコメントを確認してください)。Ruby-OpenID:OpenIDプロバイダの電子メールアドレスを要求しています
これは、私のユーザーモデルがどのように見えるか(他のすべては上記のauthlogic-example-appの "with_openid"ブランチのように見えます)です。不足している「電子メール」以外に、openid認証プロセスは期待通りに機能します。
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アカウント認証APIドキュメントにexample requestsでGoogle Account Authentication APIをチェックしauthlogicが提出した要求を比較した(ruby-openid-gemとopenid-authentication-pluginを使用して):
認証し、フェッチする例要求を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
私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
、私はopenid-authentication-pluginは、少なくとも、それはOpenIDプロバイダからの受信応答にこのメールを受け取らないことが判明しました私のユーザーモデルでregistration
ハッシュが空である理由を説明する...
UPDATE:あなたはauthlogicとのOpenIDで遊んでいる場合は、latest railscast on this subjectをチェックアウトすることを忘れないでください!
これらのフィールドが有効なときにエラーが発生します...未定義メソッド 'required_fields = 'for# ...なし: #c.required_fields = ["http://axschema.org/contact/email"] #sregでメールを取得 #c.optional_fields = ["email"]それが動作します。 –
holden
@holden:あなたが提出したgithub-issueへの返信としてこれを扱った。 – Javier
このフォークに興味があるかもしれません。READMEによると、いくつかのSRegとAXの選択を扱うことになっています:https://github.com/binaryfeed/open_id_authentication - 私は実際に質問、それだけでは、それはトピックに関連するようです。 – lindes