Logowanie za pomocą oddzielnych serwisów

0

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;
        }
1

Moim zdaniem nie ma w tym podejściu nic złego. Jest przecież dużo stron na których to właśnie adres email jest unikalnym identyfikatorem użytkownika, i Ty właśnie stosujesz to samo.

4

E-mail powinien zawsze być usernamem. To jest dobre rozwiązanie i bardzo mnie denerwują portale, gdzie tak nie jest. E-Mail jest unikalny. Username nie. I wystarczy, że znasz swój e-mail i nie musisz pamiętać kilku username'ów. To taka mała dygresja.

Jeśli typ zarejestrował się przez Facebooka, to nie wpuszczaj go przez googla i na odwrót. Każdy z takich portali ma swoje uprawnienia. I być może typ nie chce, żeby ludzie logowali się z googla (bo np. jest idiotą i daje dostęp do swojego googla kilku osobom). Jeśli rejestrował się z FB, to ma mieć dostęp z FB. Ewentualnie z konta, które założysz podczas takiej rejestracji.

0
Juhas napisał(a):

E-mail powinien zawsze być usernamem. To jest dobre rozwiązanie i bardzo mnie denerwują portale, gdzie tak nie jest. E-Mail jest unikalny. Username nie. I wystarczy, że znasz swój e-mail i nie musisz pamiętać kilku username'ów. To taka mała dygresja.

coś mi tu nie gra, szczególnie "nie musisz pamiętać kilku username'ów"

Username jest zwykłym stringiem, nieunikatowym.

Jeżeli username służy do logowania, to jest loginem, a login już jest unikatowy.

W celu zalogowania się możesz identyfikować się loginem lub emailem, bo oba są (powinny) unikatowe.

Login: dupa12
Username: Kowalski Tomasz
Email: [email protected]

1 użytkowników online, w tym zalogowanych: 0, gości: 1