5
我试图用dotNetOpenId登录到GMail帐户。它的工作原理,但我无法检索任何索赔。我知道我也可以检索电子邮件地址或用户名,但没有索赔正在返回只有 ClaimedIdentifier可用。任何人都知道如何从Gmail帐户中检索这些数据?如果你可以请给我一个ClaimsRequest配置的例子,我将不胜感激。通过DotNetOpenId检索GMail数据
感谢
我试图用dotNetOpenId登录到GMail帐户。它的工作原理,但我无法检索任何索赔。我知道我也可以检索电子邮件地址或用户名,但没有索赔正在返回只有 ClaimedIdentifier可用。任何人都知道如何从Gmail帐户中检索这些数据?如果你可以请给我一个ClaimsRequest配置的例子,我将不胜感激。通过DotNetOpenId检索GMail数据
感谢
// Either you're creating this already or you can get to it in
// the LoggingIn event of the control you're using.
IAuthenticationRequest request;
// Add the AX request that says Email address is required.
var fetch = new FetchRequest();
fetch.Attributes.Add(
new AttributeRequest(WellKnownAttributes.Contact.Email, true));
request.AddExtension(fetch);
谷歌则对用户进行认证,并返回的电子邮件地址,你可以得到:
var fetch = openid.Response.GetExtension<FetchResponse>();
if (fetch != null)
{
IList<string> emailAddresses = fetch.GetAttribute(
WellKnownAttributes.Contact.Email).Values;
string email = emailAddresses.Count > 0 ? emailAddresses[0] : null;
}
您可以在一个位的更多信息的主题看my blog post。这里需要注意的重要一点是,如果您将Google用户的电子邮件地址标记为必填项(就像我在上面的代码段中完成的那样),Google只会告诉您用户的电子邮件地址。但这也意味着如果用户不想分享他的电子邮件地址,他根本无法登录。对不起,这是Google设置它的方式。不幸的是,人们使用的其他提供者具有不同的行为。
感谢您的回复,我在我的代码中使用了您的解决方案,但它不再工作了,我想因为我已经包含了更多的属性而不仅仅是电子邮件......所以我将使用此解决方案我会告诉你.. 正如你所说,它需要提供商实施交换! – Hoghweed 2009-04-14 13:38:32
谷歌是独一无二的,它只会给你每个用户的属性值一次。因此,如果您使用自己的Google帐户进行测试,然后点击“允许此网站记住我”,它将不会在下次发送电子邮件地址。您的RP必须存储该值,并在用户下次登录时调用它。 – 2009-04-15 04:18:46
我可以强迫谷歌以某种方式忘记它给了我这些信息吗? – 2009-04-21 23:26:19