代码之家  ›  专栏  ›  技术社区  ›  Zaffiro

openid:尝试从google op获取电子邮件地址

  •  35
  • Zaffiro  · 技术社区  · 15 年前

    我使用dotneptopenauth 3.2来实现openid,但我不知道如何让Google在索赔响应中传递电子邮件地址。我知道谷歌不支持简单的注册,但我无法确定他们支持什么。

    注意这个问题是,我刚开始学习OpenID,我知道我对规范没有很好的理解,我认为这会导致我的困惑。

    任何帮助都将不胜感激!

    2 回复  |  直到 11 年前
        1
  •  52
  •   JesseBuesking    11 年前

    好的,明白了。我在上发布了一个问题 Goolge's Federated Log API group 并被告知使用 Attribute exchange .

    下面是代码 DotNetOpenAuth .

    请不要在生产中使用此代码。这仅用于说明!

    请求:

    using (OpenIdRelyingParty openid = new OpenIdRelyingParty())
    {
        IAuthenticationRequest request = openid.CreateRequest(openidurl);
    
        var fetch = new FetchRequest();
        fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
        request.AddExtension(fetch);
    
        // Send your visitor to their Provider for authentication.
        request.RedirectToProvider();
    }
    

    回答:

    OpenIdRelyingParty openid = new OpenIdRelyingParty();
    var response = openid.GetResponse();
    if (response != null)
    {
        switch (response.Status)
        {
            case AuthenticationStatus.Authenticated:
            {
                var fetch = response.GetExtension<FetchResponse>();
                string email = string.Empty();
                if (fetch != null)
                {
                    email =  fetch.GetAttributeValue(
                        WellKnownAttributes.Contact.Email);
                }
    
                FormsAuthentication.RedirectFromLoginPage(
                    response.ClaimedIdentifier, false);
                break;
            }
            ...
        }
    }
    
        2
  •  1
  •   Ashekur Rahman molla Asik    12 年前

    当我尝试获取全名时,响应为空,请提供获取全名的解决方案, 这篇文章真的很有帮助 谢谢。 我的示例代码是这样的。

    var fetch = new FetchRequest();
                fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
                fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName);
                fetch.Attributes.AddRequired(WellKnownAttributes.Company.CompanyName);
                //fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
    
                request.AddExtension(fetch);
    

    if (fetch != null)
             {
                 email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
                 name = fetch.GetAttributeValue(WellKnownAttributes.Name.FullName);
                 company = fetch.GetAttributeValue(WellKnownAttributes.Company.CompanyName);
             } 
    
    推荐文章