2016-12-01 5 views
0

Я понимаю, что я выполняю функцию входа в систему незащищенно. Но так как я новичок, я не хочу сначала заходить слишком глубоко и предпочитаю делать это самым простым и простым способом.Простая функция входа с использованием RavenDB в MVC

До сих пор, что я сделал, у меня есть администратор Модель

public class Admin 
{ 
    public string AdminUsername { get; set; } 
    public string Password { get; set; } 
} 

У меня 2 просмотры именно AdminRegister.cshtml и AdminLogin.cshtml я сделал Реестр часть, Я знаю, что пароль не должен храниться в БД и хешировании паролей. Но на данный момент я просто хочу полностью завершить функцию входа в систему.

Их соответствующий способ действия в контроллере являются следующие

public ActionResult AdminRegister(Admin model) 
    { 
     using (var store = new DocumentStore 
     { 
      Url = "http://localhost:8080/", 
      DefaultDatabase = "foodfurydb" 
     }) 
     { 
      store.Initialize(); 

      using (var session = store.OpenSession()) 
      { 
       session.Store(model); 
       session.SaveChanges(); 
      } 
     } 
     return RedirectToAction("Home"); 
    } 

[HttpPost] 
public ActionResult AdminLogin(Admin model) 
    { 
     Admin login = new Admin(); 
     using (var store = new DocumentStore 
     { 
      Url = "http://localhost:8080/", 
      DefaultDatabase = "foodfurydb" 
     }) 
     { 
      store.Initialize(); 

      using (var session = store.OpenSession()) 
      { 
       var adminInput = session 
        .Query<Admin>() 
        .Where(u => u.AdminUsername.Equals(model.AdminUsername) && u.Password.Equals(model.Password)); 

       if (adminInput != null) 
       { 

       } 
      } 
     } 
     return View(); 
    } 

Для входа в части, я предполагаю, что я должен запросить, чтобы проверить, является ли пользователь с определенным именем и паролем существует в БД или нет. И затем, я застрял и не знаю, как сравнить вход для входа и данные из db! Цените, если кто-то добрый, чтобы вести меня! Просто простой! Большое спасибо.


Узнайте, существует ли пользователь первым

var count = session 
       .Query<Admin>() 
       .Where(u => u.AdminUsername == model.AdminUsername); 

if (count > 0) 
       { 
        return RedirectToAction("AddRestaurant"); 
       } 
       else 
       { 
        // user exist in db 
        return RedirectToAction("Home"); 
       } 

мне удалось выяснить, является ли имя пользователя в поле логина существует в БД или нет. Если да, то он войдет в систему, иначе он останется на домашней странице. Но до этого этапа у меня нет идеи, как проверить пароль. Цените, если кто-нибудь может направить меня на это.

ответ

0

Давайте не будем полностью хранить пароль в виде простого текста.

Мы сначала начать загрузку документа для этого пользователя:

var adminInput = session 
    .Query<Admin>() 
    .Where(u => u.AdminUsername == model.AdminUsername) 
    .FirstOrDefault(); 

Обратите внимание, что я использую FirstOrDefault на самом деле выполнить запрос таким образом, мы будем иметь результат.

Затем вы проверяете, существует ли пользователь, и если да, то вам нужно сравнить число.

См. Это сообщение о том, как это сделать должным образом: How to hash a password