dış oturumların Bağlama ben Identity
için oldukça yeni ve varsayılan ASP.Net MVC şablonunda https://channel9.msdn.com/Series/Customizing-ASPNET-Authentication-with-Identitymevcut kullanıcıya
izlerken videolarla öğrenmeye çalışıyorum, birden dış oturumların (google, facebook) bağlanabilirsiniz Eğer hesabınız varsa (/Manage
aracılığıyla)
Ama kullanıcı google hesabını kullanarak web sitemize ilk giriş yaptı ve ondan çıkış yaptıktan sonra ve başka bir günde onların facebook hesabını kullanarak giriş yapmaya çalıştı. Hem facebook hem de google hesaplarının aynı e-posta adresini kullandığını varsayarsak, kullanıcı varsayılan sitenin UserManager.CreateAsync
'un başarısız olmasına izin vermediğinden web sitesine giriş yapamaz. E-postalarını ve giriş bilgilerini değiştirebildiklerini biliyorum, ancak aynı kullanıcı için iki farklı hesap oluşturacak. kullanıcı AspNetUserLogins
yeni harici sağlayıcıya mevcut ve reklamları eğer denetler böylece
var info = await AuthenticationManager.GetExternalLoginInfoAsync();
if (info == null)
{
return View("ExternalLoginFailure");
}
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user);
if (result.Succeeded)
{
result = await UserManager.AddLoginAsync(user.Id, info.Login);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
return RedirectToLocal(returnUrl);
}
}
ben
ExternalLoginConfirmation
kod değişmiş. Bunu yapmanın doğru yolu olup olmadığını lütfen bana söyleyebilir mi? ya da daha iyi bir yolu varsa.
if (ModelState.IsValid)
{
// Get the information about the user from the external login provider
var info = await AuthenticationManager.GetExternalLoginInfoAsync();
if (info == null)
{
return View("ExternalLoginFailure");
}
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user);
if (result.Succeeded)
{
result = await UserManager.AddLoginAsync(user.Id, info.Login);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
return RedirectToLocal(returnUrl);
}
}
//new code begins
else if (UserManager.FindByEmail(model.Email) != null)
{
var usr = await UserManager.FindByEmailAsync(model.Email);
result = await UserManager.AddLoginAsync(usr.Id, info.Login);
if (result.Succeeded)
{
await SignInManager.SignInAsync(usr, isPersistent: false, rememberBrowser: false);
return RedirectToLocal(returnUrl);
}
}
//new code ends
AddErrors(result);
}
Bunun işlemenin en iyi yolu olduğunu onayladınız mı? – stephen776
Hayır, ama şu an üzerinde çalıştığım bir proje için bunu kullanıyorum. Bunu Microsoft Virtual Academy forumunda da sormaya çalıştım. Ama maalesef henüz cevap yok. – Amila
Şu anda yaptığınız gibi aynı durumdayım. Aynı şekilde yapmayı düşünüyorum. Daha iyi bir çözüm bulursanız lütfen bize bildirir misiniz? – TTCG