Reputation: 40961
I'm using the rails plugin open_id_authentication in my app. This works for MyOpenID, however authenticating with Google I can't get the email address as part of the required attributes.
From what I understand, Google ignores sreg attribute requests, and only listens to the AX schema for email address.
Here's my code:
def open_id_authentication(openid_url)
#google only responds to AX for email, so we must provide that also
authenticate_with_open_id(openid_url, :required => [:nickname, :email, 'http://axschema.org/contact/email']) do |result, identity_url, registration|
if result.successful?
@user = User.find_or_initialize_by_identity_url(identity_url)
if @user.new_record?
unless registration['email'] || registration['http://axschema.org/contact/email']
failed_login "Your OpenID provider didn't send us an email address."
return
end
#some providers (like Google) won't send a nick name. We'll use email instead for those
nick = registration['nickname']
nick |= registration['email']
nick |= registration['http://axschema.org/contact/email']
email = registration['email'];
email |= registration['http://axschema.org/contact/email']
@user.login = nick
@user.email = email
@user.save(false)
end
self.current_user = @user
successful_login
else
failed_login result.message
end
end
My understanding is that I submit the email address (both sreg and AX) as required and I should be able to pull them out of the registration
instance that is passed along with the response.
When I log in with Google the email address is passed back as 't'.
Am I handling this incorrectly? How can I get the user's email address from Google? Will I have to jump through any other hoops to support Yahoo?
Upvotes: 4
Views: 4702
Reputation: 2483
For me it still didn't work with http://schema.openid.net/contact/email
but found out here https://groups.google.com/forum/?fromgroups=#!topic/google-federated-login-api/dOrQ8Ho5BGI that it must be openid.ax.required and that worked.
Upvotes: 0
Reputation: 15056
As another poster has already mentioned, Google responds to the AX schema for e-mail now. I know that this post was written a while ago, but Google still does not respond to namePerson. However, they do provide:
http://axschema.org/namePerson/first
http://axschema.org/namePerson/last
Therefore, to answer Shripad K's question above, you could do, using the code above as an example:
name = [
registration['http://axschema.org/namePerson/first'],
registration['http://axschema.org/namePerson/last']
].join(" ")
Upvotes: 2
Reputation: 40961
I ended up solving this one myself. It wasn't easy finding official docs on which AX schema URLs are supported.
Here's what I found:
Google will respond only to email address using the AX schema: http://schema.openid.net/contact/email
Yahoo will respond to alias & email using these AX schemas:
http://axschema.org/namePerson/friendly
http://axschema.org/contact/email
So I need to request basically all of the known AX schema URLs for email address and hope the provider sends it. /shrug
Upvotes: 7
Reputation: 81791
I don't know the Ruby OpenID library you're using very well, but it looks like you're trying to use AX by mixing its attribute Type URIs into the Simple Registration extension, which is a very different beast. You should (since I don't know it by heart) check out the docs or samples for OpenID use with the library you're using for AX specifically and make sure you're following the right steps. Google only supports AX, whereas Yahoo supports Simple Registration (I'm not sure if Yahoo also supports AX at this point).
Upvotes: 1