2010-05-29 3 views
2

Я использую класс org.jboss.seam.security.openid.OpenId для входа пользователя в мой шов webapp. В настоящее время я сохраняю validatedId (openid.getValidatedId()) в базе данных и прошу пользователя предоставить свой собственный адрес электронной почты и имя и фамилию после входа в систему. Я использую Google, Yahoo, AOL и MyOpenID для поставщики openId.Получайте адрес электронной почты от OpenId с помощью Jboss/Seam

Есть ли способ получить адрес электронной почты и/или имя пользователя/фамилию пользователя без их ввода вручную?

ответ

4

Я быстро взглянул на OpenId class in Seam 2.2.0.GA, и он уже содержит предварительный код для извлечения адреса электронной почты пользователя.

код уже просят адрес электронной почты при входе пользователя в систему.

protected String authRequest(String userSuppliedString, String returnToUrl) 
    throws IOException 
{ 
    ... 
    // Attribute Exchange example: fetching the 'email' attribute 
    FetchRequest fetch = FetchRequest.createFetchRequest(); 
    fetch.addAttribute("email", 
         "http://schema.openid.net/contact/email", // type URI 
         true);          // required 

И комментировал код для извлечения, что электронная почта от ответа.

public String verifyResponse(HttpServletRequest httpReq) 
{ 
      ... 
//  AuthSuccess authSuccess = 
//   (AuthSuccess) verification.getAuthResponse(); 

//  if (authSuccess.hasExtension(AxMessage.OPENID_NS_AX)) { 
//   FetchResponse fetchResp = (FetchResponse) authSuccess 
//    .getExtension(AxMessage.OPENID_NS_AX); 
//      
//   List emails = fetchResp.getAttributeValues("email"); 
//   String email = (String) emails.get(0); 
//  } 

В любом случае вы, вероятно, можете использовать этот код в качестве отправной точки.

Edit:

мне удалось написать small demo based on the Seam OpenID sample. К сожалению, мне пришлось копировать/вставлять код из Seam OpenId component, так как существующие биты кода обмена атрибутами были неполными, и нет очевидного способа его расширения.

Я не знаю, допустимо ли копирование/вставка кода LGPL в ваш проект. В любом случае компонент OpenID от Seam является лишь тонкой оболочкой библиотеки openid4java и может быть легко переписан.

Google, Yahoo, AOL и MyOpenID

Я попытался извлечь адрес электронной почты и личного имени пользователей с регистрацией, с четырех провайдеров вы упомянули. Вот результат моего небольшого эксперимента.

С помощью Google я получаю:

  • Gmail адрес электронной почты
  • Имя
  • Фамилия

от AOL:

  • Email (по умолчанию AOL по электронной почте, но пользователь может ввести другой)

От Yahoo:

  • Yahoo адрес электронной почты
  • Полное имя (все в одной строке)

От myOpenID:

  • Email (если пользователь подал один в его профиле)
  • Полное имя (Если пользователь подал один в своем профиле)

я должен был включать как http://schema.openid.net/contact/email и http://axschema.org в пространствах имёны запрос, чтобы получить ответ от всех поставщиков.

+0

Я проверил трафик с помощью HTTPFox, и я вижу, что «openid.ext1.value.email» - это параметр, который предоставляет Google, но другие поставщики openid (aol, myopenid, yahoo) этого не делают. В любом случае, я хотел бы получить это от SEAM. Я пробовал это: HttpServletRequest httpRequest = ServletContexts.instance(). GetRequest(); String email = httpRequest.getParameter ("openid.ext1.value.email"); в моем классе действия, но ничего не существует. – Andy

+0

Я предложил проверить HTTP-запросы, чтобы убедиться, что несколько бит на месте были жизнеспособной отправной точкой. Мне удалось собрать какой-то рабочий код. Надеюсь, это поможет вам в дальнейшем. Я обновил свой пост соответственно. –

Смежные вопросы