0
我使用DotOpenID
獲取用戶的細節,我想獲取用戶的暱稱和電子郵件ID希望通過DotNetOpenID
的要求
protected void loginButton_Click(object sender, EventArgs e)
{
if (!openidValidator.IsValid) return; // don't login if custom validation failed.
OpenID(openid_identifier.Text);
}
private void OpenID(string Indentifier)
{
OpenIdRelyingParty openid = new OpenIdRelyingParty();
try
{
IAuthenticationRequest request = openid.CreateRequest(Indentifier);
// Send your visitor to their Provider for authentication.
ClaimsRequest fetch = new ClaimsRequest();
fetch.FullName = DemandLevel.Require;
fetch.Email = DemandLevel.Require;
request.AddExtension(fetch);
request.RedirectToProvider();
}
catch (Exception ex)
{
// The user probably entered an Identifier that
// was not a valid OpenID endpoint.
openidValidator.Text = ex.Message;
openidValidator.IsValid = false;
}
}
和響應
openid_identifier.Focus();
OpenIdRelyingParty openid = new OpenIdRelyingParty();
if (openid.Response != null)
{
switch (openid.Response.Status)
{
case AuthenticationStatus.Authenticated:
string email = "";
string alias = "";
ClaimsResponse fetch = openid.Response.GetExtension(typeof(ClaimsResponse)) as ClaimsResponse;
alias = fetch.Nickname;
email = fetch.Email;
if (string.IsNullOrEmpty(alias))
alias = openid.Response.ClaimedIdentifier;
if (string.IsNullOrEmpty(email))
email = openid.Response.ClaimedIdentifier;
FormsAuthentication.RedirectFromLoginPage(openid.Response.ClaimedIdentifier, chkRememberMe.Checked);
break;
case AuthenticationStatus.Canceled:
loginCanceledLabel.Visible = true;
break;
case AuthenticationStatus.Failed:
loginFailedLabel.Visible = true;
break;
}
}
但我在這裏得到異常「未將對象引用設置爲對象的實例」。
ClaimsResponse fetch = openid.Response.GetExtension(typeof(ClaimsResponse)) as ClaimsResponse;
alias = fetch.Nickname;
email = fetch.Email;