0

Microsoft sql server Express でデータベースを作成しました。データベースを使用して、Mvc 2 アプリにログインできる必要があります (AcountController に存在するものではなく、MembershipService を意味します)。

MemeberAhipService を自分のデータベースに置き換えるだけです。どうすればそれを行うことができますか (私は最初にエンティティ フレームワーク コードを使用しています)。Visual Studio でモデルを作成する必要はありません。私はユーザーモデル userContext: Db を持っています。リポジトリも必要だと思います。手順を教えてください。

4

1 に答える 1

1

独自のMembershipServiceを作成できます。

例:

新しいMembershipService.cs(または必要なもの)

パブリッククラスMembershipService
{{
    public bool IsUserValid(string username、string password)
    {{
         var db = new DatabaseContext();
         var user = db.GetUser(username、password);
         //または、コンテキストまたはリポジトリを介してデータを取得したい場合
         return(user!= null);
    }
}

新しいFormsClass.cs

パブリッククラスFormService
{{
     public void SignIn(string username、List <string> roles)
     {{

            FormsAuthenticationTicket authTicket = new
                            FormsAuthenticationTicket(1、//バージョン
                            ユーザー名、//ユーザー名
                            DateTime.Now、//作成
                            DateTime.Now.AddMinutes(30)、//有効期限
                            false、//永続的
                            string.Join( "、"、roles.ToArray())); //役割

            文字列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(オブジェクト送信者、EventArgs e)
        {{
            HttpCookie authCookie = HttpContext.Current.Request.Cookies [FormsAuthentication.FormsCookieName];
            if(authCookie!= null)
            {{
                文字列encTicket=authCookie.Value;
                if(!String.IsNullOrEmpty(encTicket))
                {{
                    FormsAuthenticationTicketチケット=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;

                }
            }

        }

于 2011-09-09T13:15:10.937 に答える