예제 #1
0
        public async Task <IActionResult> ExternalLoginCallback(string returnUrl = null)
        {
            var externalId = SignInManager.GetExternalIdentity("Cookies");

            // check external identity - e.g. to see if registration is required
            // or to associate account with current login etc
            // name identifier is the unique id of the user in the context of the external provider
            var nameId = externalId.Result.FindFirst(ClaimTypes.NameIdentifier).Value;
            var name   = externalId.Result.FindFirst(ClaimTypes.Name).Value;
            var email  = externalId.Result.FindFirst(ClaimTypes.Email).Value;

            long userId  = 0;
            var  appUser = UserService.GetUserByEmail(email);

            if (appUser != null)
            {
                await
                SignInManager.SignInAsync(new AppUser
                {
                    UserName = name,
                    Email    = email,
                    Id       = appUser.Id
                });

                userId = appUser.Id;
            }
            else
            {
                var newUser = new Data.Models.Core.User()
                {
                    Email        = email,
                    UserName     = name.Replace(" ", ""),
                    PasswordHash = PasswordService.CreateRandomPassword(6),
                };

                //Create new user in database
                var newUserId = UserService.CreateUserReturningId(newUser);
                if (newUserId > 0)
                {
                    var newAppUser = new AppUser()
                    {
                        UserName = newUser.UserName,
                        Email    = newUser.Email,
                        Id       = newUserId
                    };
                    await SignInManager.SignInAsync(newAppUser);
                }
                userId = newUserId;
            }

            //TODO delete temp cookie
            //await HttpContext.Authentication.SignOutAsync("Temp");
            return(Redirect(Url.Action("Get", "Profile", new { id = userId })));
        }
예제 #2
0
        public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null)
        {

            var externalId = SignInManager.GetExternalIdentity("Cookies");

            // check external identity - e.g. to see if registration is required
            // or to associate account with current login etc
            // name identifier is the unique id of the user in the context of the external provider
            var nameId = externalId.Result.FindFirst(ClaimTypes.NameIdentifier).Value;
            var name = externalId.Result.FindFirst(ClaimTypes.Name).Value;
            var email = externalId.Result.FindFirst(ClaimTypes.Email).Value;

            long userId = 0;
            var appUser = UserService.GetUserByEmail(email);
            if (appUser != null)
            {
                await
                    SignInManager.SignInAsync(new AppUser
                    {
                        UserName = name,
                        Email = email,
                        Id = appUser.Id
                    });
                userId = appUser.Id;
            }
            else
            {
                var newUser = new Data.Models.Core.User()
                {
                    Email = email,
                    UserName = name.Replace(" ", ""),
                    PasswordHash = PasswordService.CreateRandomPassword(6),

                };

                //Create new user in database
                var newUserId = UserService.CreateUserReturningId(newUser);
                if (newUserId > 0)
                {
                    var newAppUser = new AppUser()
                    {
                        UserName = newUser.UserName,
                        Email = newUser.Email,
                        Id = newUserId
                    };
                    await SignInManager.SignInAsync(newAppUser);
                }
                userId = newUserId;
            }

            //TODO delete temp cookie
            //await HttpContext.Authentication.SignOutAsync("Temp");
            return Redirect(Url.Action("Get", "Profile", new { id = userId }));
        }
예제 #3
0
 public long CreateUserReturningId(Data.Models.Core.User dbUser)
 {
     return(new DbContext().User.Create(dbUser));
 }