Пользовательское членство в ASP.NET MVC для начинающих

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


person Libor Zapletal    schedule 15.09.2010    source источник
comment
Привет, ты уже выбрал способ зайти в базу данных? (структура сущности, linq2sql, ado.net?)   -  person Michel    schedule 06.10.2010


Ответы (3)


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

Мы скажем, что у вас уже есть настройка хранилища пользователей для получения имени пользователя и его пароля. Для простоты я собираюсь представить, что у вас есть статический класс с именем 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();

person Chev    schedule 05.11.2010

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

Удачи!

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

person uvita    schedule 15.09.2010
comment
Спасибо за ответ, но я не могу найти ничего, что могло бы мне помочь. Можно ссылку на какую-нибудь статью об этом? - person Libor Zapletal; 15.09.2010
comment
CodeCampServer codecampserver.codeplex.com — это пример приложения, реализующего то, что вы ищете. - person uvita; 15.09.2010

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

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

person James McCormack    schedule 27.09.2010