Cześć,
W swojej aplikacji zaimplementowałem logowanie za pomocą serwisów takich jak Facebook lub Google. Gdy user pierwszy raz się loguje za pomocą oddzielnego serwisu, wrzucam jego dane do bazy użytkowników mojej aplikacji.
Podczas normalnej rejestracji w moim serwisie, user musi podać username. Gdy loguje się za pomocą Google lub Facebooka, e-mail jest username'm. Czy to dobre podejście?
W aplikacji są unikatowe e-maile (jeden email może posiadać maksumalnie jeden user), więc gdy Facebook i google mają identyczny email lub taki email już istnieje w bazie userów, aplikacja nie pozwoli się zarejestrować. Czyli jeśli konto Google posiada adres [email protected], a konto facebooka jest zarejestrowane na ten sam adres, user będzie mógł zalogować się tylko jednym serwisem (jeśli zarejestruje się Googlem, to Facebooka już odrzuci).
Czy takie zachowanie waszym zdaniem jest poprawne?
private bool RegisterUserExternalService(ExternalLoginInfo loginInfo, out Dictionary<string, string> errors)
{
AppUser appUser = new AppUser
{
UserName = loginInfo.Principal.FindFirst(ClaimTypes.Email).Value,
Email = loginInfo.Principal.FindFirst(ClaimTypes.Email).Value
};
IdentityResult result = _userManager.CreateAsync(appUser).Result;
_userManager.AddToRoleAsync(appUser, DEFAULT_USER_ROLE_NAME).Wait();
if (result.Succeeded)
{
result = _userManager.AddLoginAsync(appUser, loginInfo).Result;
if (result.Succeeded)
{
_signInManager.SignInAsync(appUser, false);
errors = new Dictionary<string, string>();
return true;
}
}
errors = result.Errors.ToDictionary(k => k.Code, k => k.Description);
return false;
}