public async Task <IActionResult> Logon(LogonViewModel model) { if (ModelState.IsValid) { // Authenticate first var authenticated = _externalAuthenticationProvider.Authenticate(model.UserName, model.Password); if (authenticated) { var user = await _memberService.GetUserByUsernameAsync(model.UserName); if (user != null) { if (string.IsNullOrWhiteSpace(user.Name) || string.IsNullOrWhiteSpace(user.EMail)) { // Not Registered properly await _signinManager.SignInAsync(UserState.FromUser(user)); return(RedirectToAction("Index", "Member")); } // Registered properly await _signinManager.SignInAsync(UserState.FromUser(user)); return(RedirectToAction("Index", "Home")); } var result = await _memberService.RegisterNewUserAsync(model.UserName); if (result == 1) { user = _memberService.GetUserByUsernameAsync(model.UserName).GetAwaiter().GetResult(); await _signinManager.SignInAsync(UserState.FromUser(user)); return(RedirectToAction("Index", "Member")); } // Could't register, might try again. ModelState.AddModelError(Constants.ModelStateCustomErrorKey, RegisteringNewUserFailureMessage); } else { _logger.Warn($"Authentication failure for user {model.UserName}!"); ModelState.AddModelError(Constants.ModelStateCustomErrorKey, InvalidLogonMessage); } } model = new LogonViewModel { UserName = model.UserName }; return(View(model)); }