ASP.NET MVC Идентификация входа с использованием значений базы данных

1

За последние пару дней я пытался получить функции входа в систему для моего приложения ASP.NET MVC. Пользовательские данные для моего приложения хранятся в базе данных MS SQL (2008 R2). Таблица для этих данных выглядит следующим образом:

table EMPLOYEE
EMPLOYEECODE        int                  identity
NAME                varchar(75)          not null
PASSWORD            varchar(255)         not null

Что приводит к следующей модели с использованием платформы Entity Framework:

public partial class EMPLOYEE
{    
    public int EMPLOYEECODE { get; set; }
    public string NAME { get; set; }
    public string PASSWORD { get; set; }
}

Что бы я хотел сделать, это отредактировать предоставленный (по умолчанию) AccountController, чтобы он мог использовать EMPLOYEE (EMPLOYEECODE, PASSWORD) для проверки и входа в систему пользователей. Я думаю, мне нужно изменить UserManager, чтобы он использовал EMPLOYEE и поля EMPLOYEECODE и PASSWORD, но я не знаю, как это сделать. Текущий метод входа выглядит следующим образом:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        var user = await UserManager.FindAsync(model.UserName, model.Password);
        if (user != null)
        {
            await SignInAsync(user, model.RememberMe);
            return RedirectToLocal(returnUrl);
        }
        else
        {
           ModelState.AddModelError("", "Invalid username or password.");
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

Мой UserManager определяется следующим образом:

public AccountController()
        : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
    {
    }

Как я могу решить эту проблему? Я также пытался использовать cookie проверки подлинности, но я не знаю, как я могу получить имя пользователя из файла cookie. Любая помощь будет высоко оценен!

Теги:
asp.net-mvc
login

2 ответа

0

У меня была аналогичная просьба, и в итоге я сделал следующее:

  • Используемые миграции для создания таблиц Identity
  • Изменены классы Identity для использования и INT вместо GUID, как Id
  • Перенос моих данных из таблицы Employee в таблицу AspNetUsers
  • В вашем случае сопоставьте EmployeeCode с полем AspNetUsers.Id и пароль для AspNetUsers.PasswordHash.
  • В зависимости от того, как ваши пароли будут сохранены в Db, вам может потребоваться добавить дополнительный шаг здесь, чтобы получить их в таблицу в хэшированном формате.

Если ваши пароли необходимо хэшировать, вместо переноса данных, посмотрите, как пользователи зарегистрированы в Identity и помещают ваших существующих пользователей в один и тот же процесс:

  1. Получить список всех пользователей в таблице Employee
  2. Для каждого пользователя используйте контекст owin для извлечения UserManager и SignIn Manager
  3. Создайте новый ApplicationUser с помощью EmployeeCode и EmployeePassword
  4. Используйте UserManager для создания пользователя в базе данных
0

UserManager и UserStore связаны с аутентификацией удостоверения ASP.NET с собственными таблицами для пользователей, ролей и т.д. Если вы хотите использовать разные таблицы, вам необходимо создать пользовательскую функцию входа в систему.

  • 0
    Возможно ли это с помощью FormsAuthentication.SetAuthCookie (имя пользователя), если учетные данные совпадают с учетными данными в базе данных? Если да, то как я могу расшифровать аутентификацию, чтобы проверить, какой пользователь соответствует файлу аутентификации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню