Пример #1
0
        public async Task <IActionResult> Login([FromBody] LoginForDto model)
        {
            try
            {
                if (string.IsNullOrEmpty(model.UserName) || string.IsNullOrEmpty(model.Password))
                {
                    return(BadRequest("Lütfen tüm alanları doldurunuz."));
                }

                var user = await _userManager.FindByNameAsync(model.UserName);

                if (user == null)
                {
                    return(BadRequest($"{model.UserName} adında bir kullanıcı bulunamadı."));
                }

                var signIn = await _signInManager.PasswordSignInAsync(user, model.Password, model.RememberMe, false);

                if (!signIn.Succeeded)
                {
                    return(BadRequest("Kullanıcı girişi başarısız. Lütfen bilgilerinizi kontrol ediniz."));
                }

                var userRoles = await _userManager.GetRolesAsync(user);

                var expireDate = DateTime.UtcNow.AddHours(1);

                var tokenHandler    = new JwtSecurityTokenHandler();
                var tokenDescriptor = new SecurityTokenDescriptor
                {
                    Subject = new ClaimsIdentity(new Claim[]
                    {
                        new Claim(ClaimTypes.NameIdentifier, user.Id),
                        new Claim(ClaimTypes.Name, user.UserName),
                        new Claim(ClaimTypes.Email, user.Email),
                        new Claim(ClaimTypes.Role, string.Join(",", userRoles))
                    }),
                    Expires            = expireDate,
                    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_appSettings.SecretKey)), SecurityAlgorithms.HmacSha256Signature)
                };

                var token = tokenHandler.CreateToken(tokenDescriptor);

                var userInfo = new UserInfo
                {
                    Id         = user.Id,
                    Name       = user.UserName,
                    Email      = user.Email,
                    Token      = tokenHandler.WriteToken(token),
                    ExpireDate = expireDate,
                    Roles      = userRoles.ToArray()
                };

                return(Ok(userInfo));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, ex.Message));
            }
        }
Пример #2
0
        public IActionResult Login(string ReturnUrl)
        {
            var model = new LoginForDto {
                ReturnUrl = ReturnUrl
            };

            return(View(new LoginForDto()));
        }
Пример #3
0
        public async Task <IActionResult> Login([FromBody] LoginForDto model)
        {
            if (ModelState.IsValid)
            {
                var result = await _userService.LoginUserAsync(model);

                if (result.IsSuccess)
                {
                    return(Ok(result));
                }

                return(BadRequest(result));
            }

            return(BadRequest("Some properties are not valid.")); // Status code: 400
        }
Пример #4
0
        public async Task <UserManagerResponse> LoginUserAsync(LoginForDto loginForDto)
        {
            var user = await _userManager.FindByEmailAsync(loginForDto.Email);

            if (user == null)
            {
                return new UserManagerResponse
                       {
                           Message   = "Bu e-posta adresine sahip bir kullanıcı yok.",
                           IsSuccess = false
                       }
            }
            ;

            var result = await _userManager.CheckPasswordAsync(user, loginForDto.Password);

            if (!result)
            {
                return new UserManagerResponse
                       {
                           Message   = "Geçersiz şifre.",
                           IsSuccess = false
                       }
            }
            ;

            IdentityOptions _options = new IdentityOptions();

            var claims = new List <Claim>()
            {
                new Claim(ClaimTypes.Email, loginForDto.Email),
                new Claim(ClaimTypes.NameIdentifier, user.Id),
            };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["AuthSettings:Key"]));

            var token = new JwtSecurityToken(
                issuer: _configuration["AuthSettings:Issuer"],
                audience: _configuration["AuthSettings:Audience"],
                claims: claims,
                expires: DateTime.Now.AddDays(30),
                signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)
                );

            string tokenAsString = new JwtSecurityTokenHandler().WriteToken(token);
            var    currentUser   = new
            {
                Id             = user.Id,
                FirstName      = user.FirstName,
                LastName       = user.LastName,
                Email          = user.Email,
                EmailConfirmed = user.EmailConfirmed,
                PhoneNumber    = user.PhoneNumber,
                Remainder      = user.Remainder,
                OverAllRating  = user.OverAllRating,
                UserName       = user.UserName
            };

            return(new UserManagerResponse
            {
                User = currentUser,
                Message = tokenAsString,
                IsSuccess = true,
                ExpireDate = token.ValidTo
            });
        }
Пример #5
0
        public async Task <IActionResult> Login(LoginForDto model)
        {
            if (ModelState.IsValid)
            {
                var json       = JsonConvert.SerializeObject(model, Formatting.Indented);
                var httpClinet = _httpClientFactory.CreateClient("ingamedemo");
                var response   = await httpClinet.PostAsync("account/login", new StringContent(json, Encoding.UTF8, "application/json"));

                if (!response.IsSuccessStatusCode)
                {
                    var message = await response.Content.ReadAsStringAsync();

                    if (string.IsNullOrEmpty(message))
                    {
                        message = "Beklenmedik bir hata meydana geldi. Lütfen daha sonra tekrar deneyiniz.";
                    }
                    ModelState.AddModelError("", message);
                }
                else
                {
                    try
                    {
                        var userInfoRead = await response.Content.ReadAsStringAsync();

                        var userInfo = JsonConvert.DeserializeObject <UserInfo>(userInfoRead);

                        var claims = new List <Claim>
                        {
                            new Claim(ClaimTypes.NameIdentifier, userInfo.Id),
                            new Claim(ClaimTypes.Name, userInfo.Name),
                            new Claim(ClaimTypes.Email, userInfo.Email),
                            new Claim("Roles", string.Join(",", userInfo.Roles)),
                            new Claim("Token", userInfo.Token),
                        };

                        foreach (var role in userInfo.Roles)
                        {
                            claims.Add(new Claim(ClaimsIdentity.DefaultRoleClaimType, role));
                        }

                        var userIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
                        var principal    = new ClaimsPrincipal(userIdentity);

                        await HttpContext.SignInAsync(principal, new AuthenticationProperties { ExpiresUtc = userInfo.ExpireDate, IssuedUtc = userInfo.ExpireDate, });

                        if (!string.IsNullOrEmpty(model.ReturnUrl))
                        {
                            return(Redirect(model.ReturnUrl));
                        }

                        return(RedirectToAction("Index"));
                    }
                    catch (Exception ex)
                    {
                        ModelState.AddModelError("", ex.Message);
                    }
                }
            }

            return(View(model));
        }