ASP.NET MVC пользовательское членство для начинающих - PullRequest
7 голосов
/ 15 сентября 2010

Я создаю свой собственный веб-сайт и блог, и я хочу сначала только себя в базе данных (мое имя и пароль) и, возможно, позже некоторую регистрацию для других, но сначала войдите только для меня и администрации с авторизацией.Я не хочу использовать Членство от MS.Я хочу попробовать создать свой собственный с самого начала, поэтому я ищу руководство для начинающих, но я нашел большие руководства с ролями, правами.Я хочу просто небольшой пример с проверкой имени пользователя, пароля в базе данных с данными входа в систему.Спасибо за помощь Libor

Ответы [ 3 ]

5 голосов
/ 06 ноября 2010

Даже если вы не хотите использовать хранилище данных о членстве и роли, вы все равно можете использовать аутентификацию. Поверь мне, это намного проще, чем создать свой собственный. Вот как это работает:

Мы скажем, что у вас уже есть настройка хранилища пользователя для получения имени пользователя и его пароля. Для простоты я собираюсь притвориться, что у вас есть статический класс DataLayer, который содержит ваши методы извлечения данных для извлечения информации из базы данных (или любого хранилища, которое вы используете).

Для начала вам нужен способ, позволяющий пользователю войти в систему. Поэтому настройте страницу с полями имени пользователя и пароля. Затем в методе действия, который отправляет страница, чтобы настроить быстрый оператор if:

    if (DataLayer.UserExists(userModel.Username))
    {
         User userFromDB = DataLayer.GetUser(userModel.Username);
         if (userFromDB.Password == userModel.Password)
         {
              FormsAuthentication.SetAuthCookie(userFromDB.Username, checkBoxRememberMe.Checked);
              //Use userFromDB as the username to authenticate because it will 
              //preserve capitalization of their username the way they entered it
              //into the database; that way, if they registered as "Bob" but they
              //type in "bob" in the login field, they will still be authenticated
              //as "Bob" so their comments on your blogs will show their name
              //the way they intended it to.

              return "Successfully logged in!";
         }
    }

    return "Invalid username or password.";

Теперь, когда они аутентифицированы, вы можете просто использовать Page.User.Identity.IsAuthenticated в своем коде, чтобы выяснить, вошли ли они в систему. Вот так:

if (User.Identity.IsAuthenticated)
{
     DataLayer.PostBlogComment(User.Identity.Name, commentBody);
     //Then in your controller that renders blog comments you would obviously 
     //have some logic to get the user from storage by the username, then pull
     //their avatar and any other useful information to display along side the
     //blog comment. This is just an example.
}

Кроме того, вы можете заблокировать целые методы действий или даже целые контроллеры для пользователей, которые проходят проверку подлинности с помощью поставщика проверки подлинности с помощью форм. Все, что вам нужно сделать, это добавить такие теги в ваши методы / контроллеры действий:

[Authorize]
public ActionResult SomeActionMethod()
{
    return View();
}

Атрибут [Authorize] запретит пользователям, не вошедшим в систему, доступ к этому методу действия и перенаправит их на страницу входа. Этот же атрибут можно использовать для фильтрации ролей, если вы используете встроенный поставщик ролей.

[Authorize(Roles="Admin, SalesReps")]
public ActionResult SomeActionMethod()
{
    return View();
}

Эти атрибуты также можно добавить над классом контроллера, чтобы применить его логику ко всему контроллеру.

РЕДАКТИРОВАТЬ: чтобы выйти из системы, все, что вам нужно сделать, это позвонить FormsAuthentication.SignOut();

1 голос
/ 27 сентября 2010

Эта статья о проверке подлинности с помощью форм дает вам массу информации для создания собственной простой системы безопасности, особенно немного о FormsAuthenticationTicket.

http://support.microsoft.com/kb/301240

1 голос
/ 15 сентября 2010

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

Удачи!

РЕДАКТИРОВАТЬ: Вместо параметра RememberMe следует назвать keepMeSignedIn.

...