Member 12380333 Ответов: 2

Во время аутентификации ".findbynameasync()" всегда возвращает "NULL"


Я пишу проект с помощью asp.net ядро mvc 2.2, моя проблема заключается в следующем:
Во время аутентификации ".FindByNameAsync()" всегда возвращает "NULL", и поэтому процесс аутентификации не является успешным.

Моя регистрационная форма содержит:
<form asp-controller="Account" asp-action="Login" method="post">

                    <div asp-validation-summary="All" class="Danger"></div>

                    <div class="form-group">
                        <div>
                            <input asp-for="Mobile" type="text" class="form-control" style="direction:ltr;">
                            <span asp-validation-for="Mobile" class="text-danger"></span>
                        </div>                        
                    </div>
                    <div class="form-group">
                        <div>
                            <input asp-for="Password" type="password" class="form-control" style="direction:ltr;">
                            <span asp-validation-for="Password" class="text-danger"></span>
                        </div>                        
                    </div>

                    <br />
                    <div class="form-group">
                        <div>
                            <input type="submit" class="btn btn-lg btn-primary btn-block" style="text-align: center;" value="LOG IN" />
                        </div>
                    </div>



                </form>
и мой AccountController.cs содержит:
[HttpPost]
        public async Task<IActionResult> Login(Register register)
        {
            if (!ModelState.IsValid)
                return View();

            var user = await _userManager.FindByNameAsync(register.Mobile);

            if(user!=null)
            {
                var result = await _signInManager.PasswordSignInAsync(user, register.Password, false, false);

                if(result.Succeeded)
                {
                    return RedirectToAction("Welcome", "Account");
                }
            }

            ModelState.AddModelError("", "User name/password not found");
            return View();

        }
и моя таблица базы данных:
public class Register
    {

        [Key]
        [Required]
        public int Id { get; set; }
        [ForeignKey("IdFK")]
        public ICollection<Advertisement> Advertisements { get; set; }

        [Required]
        public string Mobile { get; set; }


        public string Name { get; set; }

        public string Family { get; set; }

        [Required]
        public string Password { get; set; }

        [EmailAddress]
        public string Mail { get; set; }

    }
}
Пожалуйста, помогите мне избавиться от этой проблемы

Что я уже пробовал:

Я также использовал регистр.Имя, но это не сработало!!!
Значения тоже были в ДБ. Я попробовал с ним .FindByEmailAsync(register.Mail) тоже, но это не сработало.
Я использовал точку останова в начале "AccountController.cs" и увидел "register.Мобильное" значение было "правильным", но, к сожалению, "пользовательское" значение было "нулевым"!!!
Я также создал новый проект и внедрил в него предыдущий проект, но он не сработал.
Обратите внимание, что на моем компьютере установлены Windows 10 и VisualStudio 2017 15.9.5 и VisualStudio 2019 preview 1.1.

CHill60

Я переформатировал ваш пост, чтобы правильно отформатировать фрагменты кода, но я также удалил все заглавные слова - использование всех заглавных букв рассматривается как крик в интернете - другими словами, люди думают, что это грубо. Постарайтесь избежать этого.

Richard Deeming

Если он возвращается null это означает , что соответствующая запись не существует в базе данных.

Если вы видите его в базе данных, то, скорее всего, вы либо смотрите не на ту базу данных, либо смотрите не в ту таблицу.

2 Ответов

Рейтинг:
0

Member 14085353

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        var user = await UserManager.FindByNameAsync(model.Email);
        if (user != null)
        {
            var getPasswordResult = UserManager.CheckPassword(user, model.Password);

            if (getPasswordResult)
            {
                AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);

                var identity = await UserManager.CreateIdentityAsync(
                          user, DefaultAuthenticationTypes.ApplicationCookie);


Рейтинг:
0

Member 14085353

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        var user = await UserManager.FindByNameAsync(model.Email);
        if (user != null)
        {
            var getPasswordResult = UserManager.CheckPassword(user, model.Password);

            if (getPasswordResult)
            {
                AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);

                var identity = await UserManager.CreateIdentityAsync(
                          user, DefaultAuthenticationTypes.ApplicationCookie);

                AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = model.RememberMe }, identity);

                if (model.RememberMe == true)
                {
                    HttpCookie cookie = new HttpCookie("UsersLogin");
                    cookie.Values.Add("UserName", model.Email);
                    cookie.Expires = DateTime.Now.AddDays(15);
                    Response.Cookies.Add(cookie);
                }



                return RedirectToAction("NavigateAuthUser", "Home", new { ReturnUrl = returnUrl });
            }
            else
            {
                ModelState.AddModelError("", "Invalid login attempt.");
                return View(model);
            }
        }

        return new EmptyResult();
    }




это код из моего проекта. надеюсь, вы сможете найти лучшее решение от этого пера.


Richard Deeming

Почему вы опубликовали это дважды?