public async Task<IActionResult> Login([FromBody] UserForm login) { if (!ModelState.IsValid) { return HttpResponseHelper.BadRequest(ModelState); } if (string.IsNullOrWhiteSpace(login.Username) && string.IsNullOrWhiteSpace(login.Email)) { return HttpResponseHelper.BadRequest("Either Username or Email is required."); } if (string.IsNullOrWhiteSpace(login.Password)) { return HttpResponseHelper.BadRequest("Password is required."); } IQueryable<Player> query = _context.Players; if (!string.IsNullOrWhiteSpace(login.Username)) { query = query.Where(a => a.Username.Equals(login.Username)); } if (!string.IsNullOrWhiteSpace(login.Email)) { query = query.Where(a => a.Email.Equals(login.Email)); } var player = await query.FirstOrDefaultAsync(); if (player == null) { return HttpResponseHelper.NotFound("No such Player found."); } if (!PasswordHelper.ValidatePassword(login.Password, player.Password)) { return HttpResponseHelper.Unauthorized("Invalid Login Details."); } var playerSession = new Session { Player = player }; _context.Sessions.Add(playerSession); var error = await SaveChangesAsync(); if (error != null) { return error; } return CreatedAtRoute("GetSession", new { id = playerSession.Id }, playerSession); }
protected Session GetSession() { return _session ?? (_session = HttpContext.Session.GetObjectFromJson<Session>("__session")); }