コード例 #1
0
        public async Task <(bool, UserModel)> SocialLoginAsync(UserSocialLogin userSocialLogin)
        {
            var user = await _context.Users.Where(u => u.Email == userSocialLogin.Email)
                       .SingleOrDefaultAsync();

            if (user == null)
            {
                return(true, await SocialSignUpAsync(userSocialLogin));
            }
            if (user.Email == userSocialLogin.Email)
            {
                return(true, _mapper.Map <UserModel>(user));
            }
            else
            {
                return(false, null);
            }
        }
コード例 #2
0
        private async Task <UserModel> SocialSignUpAsync(UserSocialLogin userSocialLogin)
        {
            var user = _mapper.Map <UserSocialLogin, User>(userSocialLogin, cfg =>
                                                           cfg.AfterMap((src, dest) =>
            {
                dest.RegisteredDate = DateTime.Now;
                dest.Age            = new DateTime((DateTime.UtcNow - Convert.ToDateTime(src.BirthDate)).Ticks).Year;
                dest.RoleId         = (int)RoleType.Student;
            }));

            if (user != null)
            {
                _context.Users.Add(user);
                await _context.SaveChangesAsync();

                return(_mapper.Map <UserModel>(user));
            }
            return(null);
        }
コード例 #3
0
        public async Task <IActionResult> SocialLogin(UserSocialLogin userSocialLogin)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var(state, user) = await _authService.SocialLoginAsync(userSocialLogin);

            if (state)
            {
                var access_token  = new JwtSecurityTokenHandler().WriteToken(await _tokenService.GenerateAccessTokenAsync(user.Id));
                var refresh_token = (await _tokenService.GenerateRefreshTokenAsync(user)).Token;

                return(Ok(new
                {
                    access_token,
                    refresh_token
                }));
            }
            return(NotFound(new { title = "Couldnt login via exernal provider" }));
        }