繁体   English   中英

使用Jboss / Seam从OpenId获取电子邮件地址

Get email address from OpenId using Jboss/Seam

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在使用org.jboss.seam.security.openid.OpenId类将用户的帐户登录到我的接缝webapp。 目前,我将validatedId(openid.getValidatedId())保存到数据库中,并要求用户在登录后提供自己的电子邮件地址以及姓氏和名字。我使用Google,Yahoo,AOL和MyOpenID作为openId提供者。

有什么方法可以让用户手动输入电子邮件地址和/或用户的姓氏/名字?

1 个回复

我快速浏览了Seam 2.2.0.GA中的OpenId类 ,它已经包含一些用于检索用户电子邮件地址的临时代码。

用户登录时,该代码已经要求输入电子邮件地址。

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);
//        }

无论如何,您都可以使用该代码作为起点。

编辑:

我设法根据Seam OpenID示例编写了一个小演示 不幸的是,由于属性交换代码的现有位不完整,并且没有明显的扩展方法,因此我不得不从Seam OpenId组件复制/粘贴代码。

我不知道复制/粘贴LGPL代码在您的项目中是否可以接受。 无论如何,Seam的OpenID组件只是openid4java库的一个薄包装,可以很容易地重写。

Google,Yahoo,AOL和MyOpenID

我试图从您提到的四个提供商那里获取登录用户的电子邮件地址和个人名称。 这是我的小实验的结果。

从Google我获得:

  • Gmail电子邮件地址
  • 名字

从AOL:

  • 电子邮件(默认为AOL电子邮件,但用户可以输入其他电子邮件)

来自Yahoo:

  • 雅虎电子邮件地址
  • 全名(一串)

从myOpenID:

  • 电子邮件(如果用户已在其个人资料中提交了一个)
  • 全名(如果用户已在其个人资料中提交了姓名)

我必须在请求中同时包含http://schema.openid.net/contact/emailhttp://axschema.org namspaces才能从所有提供商那里获得响应。

2 使用Google OpenID获取用户电子邮件地址

我正在尝试使用DotNetOpenAuth通过OpenID从Google检索用户的电子邮件地址。 到目前为止,我的代码正确地重定向到当前用户的Google,并要求我的应用程序读取电子邮件地址的权限。 然而,当被转移回我的页面时,它会直接反弹回谷歌。 我明白为什么会发生这种情况(因为页面 ...

4 OpenID:尝试从Google OP获取电子邮件地址

我正在使用dotnetopenauth 3.2来实现Openid,但无法弄清楚如何让Google通过Claims Response中的电子邮件地址。 我知道Google不支持简单的注册,但是我无法确定他们支持什么。 需要注意的是,我刚刚开始学习OpenID,我知道我对该规范没有扎实的了解 ...

5 从OpenID提供商处请求电子邮件地址

我正在实现OpenID,我想检索用户的电子邮件地址和有关用户的其他信息,我这样做: 但提供者不会返回任何内容。 我正在使用DotNetOpenID 我究竟做错了什么? 谢谢! 编辑: 当我尝试使用MyOpenID或Google在http://www.plaxo. ...

6 从Yesod OpenID检索电子邮件地址

在使用Yesod的OpenId实现进行身份验证后,有没有办法检索用户的电子邮件地址? 在我的测试应用程序中,重定向和身份验证正确发生,并且maybeAuthId为我提供了数据库中相应条目的ID。 但是,该身份存储为URL。 我可以使用它,但是也可以像其他OpenId软件包那样获得用 ...

8 使用openid和python获取电子邮件

我正在尝试使用下面的表格和web.py从OpenId请求中获取电子邮件地址。 我得到了OpenId哈希,但是在我的apache环境中看不到与电子邮件相关的任何东西,仅是openid_identity_hash。 这是我使用web.py的html表单。 通过查看Google开发站点 ...

9 使用来自JBoss Seam的EntityHome合并JPA实体

我正在尝试使用JBoss Seam和JPA更新实体,但是我面临着非常普遍的分离实体问题。 我会更好地解释。 我有两个相关的简单实体。 此关系与注释映射。 看一看: 我的第二个实体: 好,到目前为止,很好。 现在,我有一个从JBoss Seam扩展EntityHome ...

10 通过 OpenID Connect 从 Azure AD 获取用户的电子邮件地址

我正在尝试使用他们的 Office 365 帐户对我站点的用户进行身份验证,因此我一直遵循有关使用 OWIN OpenID Connect 中间件添加身份验证的指南,并成功地设法对他们的个人资料进行身份验证和检索。 我现在正在尝试获取用户的电子邮件地址(以便我可以使用他们的联系方式填充他们的系统帐 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM