mvc entity framework: вход в систему с использованием базы данных

Я создал базу данных в Microsoft sql server express. Мне нужно иметь возможность войти в приложение Mvc 2, используя мою базу данных (а не ту, которая существует в AcountController, что означает MembershipService)

Мне просто нужно заменить MemeberAhipService моей базой данных. Как я могу это сделать (сначала я использую код структуры сущности). Мне не нужно создавать модель в Visual Studio. У меня есть модель пользователя, userContext: Db. Думаю, мне тоже нужен репозиторий. Может ли кто-нибудь показать мне пример, рассказать мне шаги?


person studentsss    schedule 09.09.2011    source источник


Ответы (1)


Вы можете создать свой собственный MembershipService.

Пример:

Новый MembershipService.cs (или что угодно)

public class MembershipService
{
    public bool IsUserValid(string username, string password)
    {
         var db = new DatabaseContext();
         var user = db.GetUser(username, password);
         // Or however you want to get your data, via Context or Repository
         return (user != null); 
    }
}

Новый FormsClass.cs

public class FormService
{
     public void SignIn(string username, List<string> roles)
     {

            FormsAuthenticationTicket authTicket = new
                            FormsAuthenticationTicket(1,            // Version
                            username,                               // Username
                            DateTime.Now,                           // Creation
                            DateTime.Now.AddMinutes(30),            // Expiration
                            false,                                  // Persistent
                            string.Join(",", roles.ToArray()));     // Roles

            string encTicket = FormsAuthentication.Encrypt(authTicket);
            HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

            GenericIdentity id = new GenericIdentity(username);
            HttpContext.Current.User = new GenericPrincipal(id, roles.ToArray());
     }
}

В Global.asax:

        protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
        {
            HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie != null)
            {
                string encTicket = authCookie.Value;
                if (!String.IsNullOrEmpty(encTicket))
                {
                    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(encTicket);
                    FormsIdentity id = (FormsIdentity)Context.User.Identity;
                    var roles = ticket.UserData.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

                    GenericPrincipal prin = new GenericPrincipal(id, roles);
                    HttpContext.Current.User = prin;

                }
            }

        }

person jaekie    schedule 09.09.2011
comment
большое спасибо. Я попробую это сделать. Я новичок в MVC, а также в структуре сущностей. У вас есть ссылки, по которым я могу узнать больше о репозитории или сделать что-то вроде входа в систему из базы данных? - person studentsss; 09.09.2011
comment
Затем общедоступный IMembershipService MembershipService {get; набор; } станет просто: public MembershipService {get; набор; } - person studentsss; 09.09.2011
comment
Затем public IMembershipService MembershipService {get; набор; } станет просто: public MembershipService {get; набор; }. В этом классе у нас будут свойства ** имя пользователя **, ** пароль **? - person studentsss; 09.09.2011
comment
Вы можете просто создать интерфейс для наследования MembershipService, у вас может быть свойство под названием Username, я бы не советовал использовать пароль в качестве свойства - person jaekie; 09.09.2011
comment
Извините за то, что продолжаю спрашивать. Еще один вопрос, пожалуйста. DatabaseContext из вашего примера должен выглядеть так: public DbSet ‹User› LogonUser {get; набор; } где в User Class у меня есть 2 свойства: ** имя пользователя, пароль. Чем следует заполнить свойство GetUser? Буду очень признателен, если вы поможете - person studentsss; 12.09.2011
comment
Мне нужно обернуть проект в библиотеку классов. Как я могу это сделать? В моделях у меня есть пользователи класса с именем свойства, id. у меня есть база данных классов public class UserData : DbContext { public DbSet<Users> LogonUser { get; set; } и класс UserRepository. Я создал новую библиотеку классов проекта. что мне туда положить? Мне нужно поставить класс UserData и класс Users? - person studentsss; 13.09.2011