OpenID/Relying Party (Google, Yahoo! ..)를 사용하여 로그인을 시도하고 있습니다. 내 로그인 페이지는 다음과 같습니다.DotNetOpenAuth : 전자 메일을받은 동일한 OpenID를 얻지 못하는 이유는 무엇입니까?
는 내가하고 싶은 간단하다
는 사용자로부터 오픈 ID를 취득하여 보관하고, 사용자 계정과 연결. 고유 한 OpenID가 공급자로부터 반환 될 때마다 연결된 사용자가 이제 로그인 된 것입니다. Simple.
문제는 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();
}
}
감사합니다. 신이 너의 영혼을 구할 수있어. –