PetShopベースのデータ可視化Webサイト(4):メンバーシップのカスタマイズ


プロジェクト要件のため、メンバー管理やログインなどのコンテンツを追加し、カスタムメンバーシップを簡単に紹介する必要があります.
具体的なプロジェクトファイルは私のgithub倉庫を参考にすることができます.

カスタムメンバーシップ


カスタムメンバーシップは、ユーザーの作成、検証、パスワードの変更など、ユーザーの管理として理解できます.ASP.NETには、MembershipProviderクラスと呼ばれるこれらの操作をより明確に規定できるクラスが提供されています.
MembershipProviderクラスは抽象クラスであるため,この抽象クラスを継承して実現する必要がある.
BLLレイヤにクラスを新規作成できます.たとえば、MemberShipProvider.cs.このクラスはSystemを継承します.Web.Security.MembershipProviderは、抽象クラスを迅速に操作して実現できます.コードは次のとおりです.
public class MemberShipProvider
        :System.Web.Security.MembershipProvider

実装後、ChangePassword()など、実装する必要がある方法がたくさんあることがわかります.ここではCreateUserを例に説明します.
ユーザーを作成する基本的な考え方はブラウザ側から転送されたデータに対して簡単な検証を行い、検証は後呼び出しデータアクセス層の相応の方法でユーザーデータを挿入し、最終的に相応の内容を返し、具体的なコードは以下の通りである.
public override System.Web.Security.MembershipUser CreateUser(
            string username, 
            string password, 
            string email, 
            string passwordQuestion, 
            string passwordAnswer, 
            bool isApproved, 
            object providerUserKey, 
            out System.Web.Security.MembershipCreateStatus status)
        {
            //  username    ,    status   InvalidUserName
            if (string.IsNullOrEmpty(username))
            {
                status = System.Web.Security.MembershipCreateStatus.InvalidUserName;
                return null;
            }
            //              
            FWSync.IDAL.IUser dal = FWSync.DALFactory.DataAccess.CreateUser();
            //                  
            bool isexist = dal.ValidateUserExist(username);
            //      , status   DuplicateUserName
            if (isexist)
            {
                status = System.Web.Security.MembershipCreateStatus.DuplicateUserName;
                return null;
            }
            //          
            UserInfo us = new UserInfo();
            us.UserName = username;
            //     md5    
            us.PassWord = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password,"MD5"); 
            //              
            int userid = dal.InsertUser(us);
            //    ,  status   Success
            status = System.Web.Security.MembershipCreateStatus.Success;
            //    MembershipUser   
            System.Web.Security.MembershipUser user
                = new System.Web.Security.MembershipUser(
                    "MyMemberShip",
                    username,
                    userid,
                    string.Empty,
                    string.Empty,
                    string.Empty,
                    true,
                    false,
                    DateTime.Now,
                    DateTime.Now,
                    DateTime.Now,
                    DateTime.Now,
                    DateTime.Now
                    );
            return user;
        }

最後に戻ったuserでは空欄や現在時間をたくさん設定していますが、これらの内容は基本的にメールボックスや登録時間などで、私は使用していないので値を付けていません.使用すれば、ほとんどの内容が伝達された変数から入手できます.
userの「MyMemberShip」はwebです.configのデフォルトのメンバーシップの構成パラメータで、その構成コードは次のとおりです.
<membership defaultProvider="MyMemberShip">
      <providers>
        <clear/>
        <add name="MyMemberShip" type="FWSync.BLL.MemberShipProvider,FWSync.BLL"/>
      providers>
    membership>

次に、登録ページで作成したカスタムメンバーシップをどのように使用するかです.私は簡単に登録ページに2つのTextBoxと1つのButtonを書きました.TextBoxにはユーザー名とパスワードがそれぞれ書かれています.Buttonはクリックして提出します.次はButtonのバックグラウンドコードです.
protected void btnregister_Click(object sender, EventArgs e)
    {
        string username = this.tbxusername.Text;
        string password = this.tbxpassword.Text;

        System.Web.Security.MembershipCreateStatus status;

        //     "haha" string.Empty,          ,        ,             
        System.Web.Security.MembershipUser user =
            System.Web.Security.Membership.CreateUser(
            username,
            password,
            string.Empty,
            "haha",
            "haha",
            true,
            out status
            );
        //out    status,  status       ,         
        switch (status)
        {
            case MembershipCreateStatus.Success:
                this.Response.Redirect("~/Default.aspx");
                break;
            case MembershipCreateStatus.InvalidUserName:
                this.lblWarn.Text = "     ";
                break;
            case MembershipCreateStatus.DuplicateUserName:
                this.lblWarn.Text = "       ";
                break;
            default:
                this.lblWarn.Text = "    ";
                break;
        }

ここで私はoutをくどくど言って、c#のこの言語の中で、outはざっとポインタと理解することができて、私達はstatusを定義した後に、CreateUserのこの方法の中でその値を変えることができて、最後に戻った値を通じてユーザーがこの関数を登録してどんな問題が発生したかを判断します.