【ASP.net MVC】WebSecurity的小筆記

【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();

 

 


 

大家好我是饅頭,希望大家喜歡我的文章

如果有錯誤的地方請不吝指教 ^_^