Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

Asp Net Core Login: Email wird nicht erkannt

27.07.2018 (👁8051)


Problem:

beim Login über ein Asp Net Login-Formular wird die Email nicht erkannt.

Betrifft:

Asp.Net Core 2 MVC Identiy

 

 

Ursache:

In der Standard-Software Vorgabe von Asp.Net Core MVC Anwendungen wird beim Einbinden der Microsoft Identity der AccountControler.cs falsch erstellt.

Die Login-Methode frägt nach dem User ab und nicht nach der Email.

_signInManager.PasswordSignInAsync(Username, model.Password, model.RememberMe, lockoutOnFailure: false);

 

Man muss deshalb vor dem Aufruf der der PasswordSignIn Methode noch den User als Username ermitteln.

Hierzu kann man den User mit dem _userManager ermitteln

        //--< check user >--

        var user = await _userManager.FindByEmailAsync(model.Email);

        if (user == null)

        {

            //*old: Don't reveal that the user does not exist

            //*old: return RedirectToAction(nameof(ResetPasswordConfirmation));

            //return RedirectToAction(nameof(Register));

            ModelState.AddModelError("""email not found or password wrong.");

            return View(model);

        }

        //--</ check user >--

 

 

Anschliessend übernimmt man den Username und übergibt diesen als ersten Parameter

string Username = user.UserName;

        var result = await _signInManager.PasswordSignInAsync(Username, model.Password, model.RememberMe, lockoutOnFailure: false);

 

 

 

Komplettes Login, Asp.Net Core 2 MVC

[HttpPost]

[AllowAnonymous]

[ValidateAntiForgeryToken]

public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)

{

    //--------------< Login_Postback() >--------------

    ViewData["ReturnUrl"] = returnUrl;

    if (ModelState.IsValid)

    {

        //--< check user >--

        var user = await _userManager.FindByEmailAsync(model.Email);

        if (user == null)

        {

            //*old: Don't reveal that the user does not exist

            //*old: return RedirectToAction(nameof(ResetPasswordConfirmation));

            //return RedirectToAction(nameof(Register));

            ModelState.AddModelError("""email not found or password wrong.");

            return View(model);

        }

        //--</ check user >--

 

 

        string Username = user.UserName;

        var result = await _signInManager.PasswordSignInAsync(Username, model.Password, model.RememberMe, lockoutOnFailure: false);

        if (result.Succeeded)

        {

            //-< ok >-

            _logger.LogInformation("User logged in.");

            return RedirectToLocal(returnUrl);

            //-</ ok >-

        }