【ASP.net MVC】揭開WebSecurity的神秘面紗!
一開始MVC中就內建了一個登入的方式,就是WebSecurity的類別;以前在做登入的時候,都會利用FormsAuthentication類別來處理登入的認證狀態,這個類別就變得很少人使用...但其實這個類別,更容易做登入登出的驗證!
傳統FormsAuthentication驗證的寫法:
如果我們改成利用WebSecurity的方法呢?
首先,我們要先將WebSecurity初始化
一開始MVC中就內建了一個登入的方式,就是WebSecurity的類別;以前在做登入的時候,都會利用FormsAuthentication類別來處理登入的認證狀態,這個類別就變得很少人使用...但其實這個類別,更容易做登入登出的驗證!
傳統FormsAuthentication驗證的寫法:
public void SetLoginStatus(MemberTable MemberData,LogInModel UserData)
{
String UserName = (MemberData.Anonymous == null ? MemberData.RealName : MemberData.Anonymous);
//設定認證cookie
FormsAuthentication.SetAuthCookie(UserName, UserData.RememberMe);
//設定其他cookie資料
HttpCookie Cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.GetAuthCookie(UserName, UserData.RememberMe).Value);
//記得我勾選
if (UserData.RememberMe) Cookie.Expires = DateTime.MaxValue;
//存入cookie
HttpContext.Current.Response.Cookies.Add(Cookie);
//設定Email在cookie中
HttpContext.Current.Response.Cookies.Add(new HttpCookie("UserEmail",MemberData.Email));
}
如果我們改成利用WebSecurity的方法呢?
首先,我們要先將WebSecurity初始化
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute { private static SimpleMembershipInitializer _initializer; private static object _initializerLock = new object(); private static bool _isInitialized; public override void OnActionExecuting(ActionExecutingContext filterContext) { // 請確定一個應用程式啟動只起始一次 ASP.NET Simple Membership LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock); } private class SimpleMembershipInitializer { public SimpleMembershipInitializer() { //初始化資料庫連線 Database.SetInitializer<UsersContext>(null); try { using (var context = new UsersContext()) { //檢查資料庫是否正處於可連線狀態 if (!context.Database.Exists()) { // 建立沒有 Entity Framework 移轉結構描述的 SimpleMembership 資料庫 ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); } } //假設資料表不存在時,自動建立 WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); } catch (Exception ex) { throw new InvalidOperationException("無法起始 ASP.NET Simple Membership 資料庫。如需詳細資訊,請參閱 http://go.microsoft.com/fwlink/?LinkId=256588", ex); } } } }
登入之前,需要先註冊
CreateUserAndAccount,就可以建立新用戶,達到會員註冊的功能!
WebSecurity.CreateUserAndAccount(RegisterData.Email, RegisterData.Password);
登入
WebSecurity.Login(RegisterData.Email, RegisterData.Password);
登出
WebSecurity.Logout();
大家好我是饅頭,希望大家喜歡我的文章
如果有錯誤的地方請不吝指教 ^_^