#c# #.net #dotnetopenauth
#c# #.net #dotnetopenauth
Вопрос:
Я не могу получить адрес электронной почты, возвращенный в GetExtension
методе, но он включен в URL, который Google (OP, с которым я тестирую) отправляет мне обратно.
if (Page.IsPostBack)
{
using (var openid = new OpenIdRelyingParty())
{
var request = openid.CreateRequest(Request.Form["openid_identifier"]);
var fetch = new FetchRequest();
fetch.Attributes.Add(new AttributeRequest(WellKnownAttributes.Contact.Email, true));
request.AddExtension(fetch);
request.RedirectToProvider();
}
}
else
{
using (var openid = new OpenIdRelyingParty())
{
var response = openid.GetResponse();
if (response != null)
{
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
var claimsResponse = response.GetExtension<FetchRequest>();
break;
case AuthenticationStatus.Canceled:
//this.loginCanceledLabel.Visible = true;
break;
case AuthenticationStatus.SetupRequired:
//this.loginFailedLabel.Visible = true;
break;
// We don't need to handle SetupRequired because we're not setting
// IAuthenticationRequest.Mode to immediate mode.
////case AuthenticationStatus.SetupRequired:
//// break;
}
}
}
}
Кто-нибудь знает, что не так?
Комментарии:
1. «но он включен в URL, который использует Google» … Похоже, что в вашем вопросе отсутствует часть. Не хотите ли пересмотреть, пожалуйста?
Ответ №1:
Попробуйте следующий код:
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
var fetch = response.GetExtension<FetchResponse>();
string email = String.Empty;
if (fetch != null)
{
email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
}
break;
//...
}
Комментарии:
1. это то, что я делаю в своем коде, но response.getExtension<fetchRequest>() всегда возвращает null
2. вы правы.. Я использую fetchRequest вместо FetchResponse .. спасибо!
3. строка email = строка. Empty(); ? Пустой метод ? Хах?
Ответ №2:
Ни одно из вышеперечисленных действий не сработало для меня (используя PayPal Access в качестве идентификатора) в C#
Нижеприведенное сработало для меня:
OpenIdRelyingParty openid = new OpenIdRelyingParty();
protected void Page_Load(object sender, EventArgs e)
{
var response = openid.GetResponse();
if (response != null)
{
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
if (this.Request.Params["openid.ext1.value.alias1"] != null)
{
Response.Write(this.Request.Params["openid.ext1.value.alias1"]);
Response.Write(this.Request.Params["openid.ext1.value.alias2"]);
}
else {
Response.Write("Alias wrong");
}
break;
}
}
}
protected void loginButton_Click(object sender, EventArgs e)
{
var openidRequest = openid.CreateRequest(openIdBox.Text);
var fetch = new FetchRequest();
fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName);
openidRequest.AddExtension(fetch);
openidRequest.RedirectToProvider();
}