我试图使用OpenID /依赖方(Google,Yahoo!..)登录。我的登录页面如下。DotNetOpenAuth:为什么我的电子邮件没有得到相同的OpenID?
我想要做的是简单的:
从用户获取的OpenID,储存,并将其与用户帐户相关联。每次从提供程序返回唯一的OpenID时,我都会知道现在关联的用户已登录。简单。
问题是,response.ClaimedIdentifier.OriginalString
这就是我认为是OpenID是不唯一的。它几乎是独一无二的。大多数情况下,返回的值是相同的,但有时并非总是如此(出于某些原因(特别是更改浏览器或计算机)),此值会更改,并为用户创建另一个帐户。
我在做什么错?无论浏览器或计算机如何,我必须存储的TRUE OpenID代码是独一无二的?
public partial class Pages_User_LoginOpenID : LivrePage
{
OpenIdRelyingParty relyingParty = new OpenIdRelyingParty();
IAuthenticationResponse response = null;
protected void Page_Load(object sender, EventArgs e)
{
response = relyingParty.GetResponse();
if (response != null)
{
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
// verifico se existe um usuário com este openid
OpenId openId = UserHelper.GetSession().CreateCriteria<OpenId>().Add(Expression.Eq("IdentifierString", response.ClaimedIdentifier.OriginalString)).UniqueResult<OpenId>();
if (openId == null)
{
openId = new OpenId();
openId.IdentifierString = response.ClaimedIdentifier.OriginalString;
// não existe usuário com este OpenId
User newUser = UserHelper.CreateUser(openId);
SecurityManager.Login(newUser.Id);
}
else
SecurityManager.Login(openId.User.Id);
Response.Redirect(UrlFactory.GetUrlForPage(UrlFactory.PageName.Home));
break;
default:
break;
}
}
}
// processes the login button click
protected void ButtonLogin_Click(object sender, EventArgs e)
{
if (response == null)
relyingParty.CreateRequest(TextBoxOpenID.Text).RedirectToProvider();
}
}
谢谢!愿上帝拯救你的灵魂 – 2010-06-29 14:56:14