版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
MVCGuestbook高級實戰(zhàn)注冊,登陸功能實現(xiàn)王言注冊的需求分析注冊需完成功能:
向數(shù)據(jù)庫提交數(shù)據(jù),對輸入的數(shù)據(jù)格式,長度的檢驗對空值的反應(yīng)
在用戶完成數(shù)據(jù)輸入后,系統(tǒng)應(yīng)向用戶提交的郵箱地址發(fā)送系統(tǒng)自動生成的驗證碼,用戶通過接收到的郵件超鏈接完成驗證碼的驗證
系統(tǒng)應(yīng)將用戶的密碼自動加密后保存登陸,登出的需求分析登陸應(yīng)完成的功能:對注冊驗證碼的檢測,若郵箱驗證未成功則不能進行登陸對用戶提交的數(shù)據(jù)進行登錄驗證對空值的反應(yīng),以及對輸入數(shù)據(jù)格式和長度的檢測對用戶的權(quán)限的檢測登出應(yīng)完成的功能:注銷用戶的登錄信息用例圖流程圖注冊流程圖
流程圖登陸流程圖數(shù)據(jù)庫用戶注冊,登錄,登出功能中只涉及到了一張表Member:表格名稱Member表格說明會員數(shù)據(jù)表,存儲所有會員數(shù)據(jù)字段名稱數(shù)據(jù)類型是否允許null默認值描述系統(tǒng)ID(ID)int否自動編號(自增變量)賬戶(Account)nvarchar(50)否會員賬號密碼(Password)nvarchar(50)否會員密碼,經(jīng)SHA1雜湊運算生成姓名(ChName)nvarchar(50)否中文姓名昵稱(NickName)nvarchar(50)否昵稱數(shù)據(jù)庫字段名稱數(shù)據(jù)類型是否允許null默認值描述郵箱(Email)nvarchar(50)否電子郵件地址會員權(quán)限(IsAdmin)bit否((0))是否為版主頭像(Head)nvarchar(50)否會員頭像圖示性別(Sex)nvarchar(50)否會員性別認證碼(AuthCode)nvarchar(50)否會員啟用認證碼加入時間(CreatTime)nvarchar(50)否(getdate())會員加入時間模型設(shè)計模型業(yè)務(wù)邏輯MemberPartial定義了EntityFramework中Member數(shù)據(jù)類型。IMemberRepository與數(shù)據(jù)庫有關(guān)的動作抽象成的一個一個的接口。這里主要是與登陸注冊相關(guān)的各種狀態(tài)的檢測和數(shù)據(jù)檢驗等動作。MemberRepositoryIMemberRepository的實現(xiàn)類控制器設(shè)計控制其名稱操作輸入輸出作用Account(#region注冊)Register()無跳轉(zhuǎn)注冊頁面顯示頁面SendRegisterMail(Membermember)用戶類無向郵箱發(fā)送郵箱驗證碼Register[Bind(Exclude="ID,IsAdmin,AuthCode,CreateTime")]Membermember)除去不需要綁定字段的用戶類注冊成功則跳轉(zhuǎn)主頁面;否則跳轉(zhuǎn)注冊頁面接受窗口數(shù)據(jù)(將導入?yún)?shù)設(shè)定為Member類)Verify(stringauthCode)會員郵箱驗證的驗證碼跳轉(zhuǎn)回當前頁面郵箱驗證碼的驗證控制器設(shè)計控制其名稱操作輸入輸出作用Account(#region登錄)(#region登出)LogOn()無返回當前頁面顯示頁面LogOn(stringaccount,stringpassword)會員賬號,密碼登陸成功返回用戶界面;否則返回登陸頁面(或注冊頁面)接受窗口數(shù)據(jù),完成登陸驗證LogOff()無返回主頁面用戶登出視圖設(shè)計視圖名稱關(guān)聯(lián)的操作作用Account.RegisterAccountController.Register會員注冊頁面Account.LogOnAccountController.LogOn會員登錄頁面Account.VerifyAccountContriller.Verify驗證會員資格頁面視圖展示核心代碼MemberPartialpublicpartialclassMember{privateclassMemberMetadata//聲明讓Action在綁定Member數(shù)據(jù)時自動對各字段進行驗證{[DisplayName("系統(tǒng)編號")]//有數(shù)據(jù)庫自動產(chǎn)生,系排除綁定字段publicintID{get;set;}[DisplayName("賬號")]
[Required(ErrorMessage="請輸入賬號")][StringLength(50,ErrorMessage="請勿輸入超過50個字")]publicstringAccount{get;set;}............}}核心代碼ImemberRepository模型類名動作作用IMemberRepositoryLogOnStatus(enum)NotActivated,尚未驗證郵件地址Successful,登錄成功Failure登錄失敗IMemberRepositoryCheckDuplicate(Membermember);檢查會員數(shù)據(jù)是否重復Create(Membermember);向數(shù)據(jù)庫中添加數(shù)據(jù)VerifyAuthCode(stringauthCode);驗證會員返回認證碼LogOnStatusValidateLogOn(stringid,stringpw);取得登錄狀態(tài)stringGetRoleByAccount(stringaccount);取得特定賬號的角色GetMemberByAccount(stringaccount);取得用戶賬號核心代碼MemberRepositorypublicclassMemberRepository:IMemberRepository{
MvcGuestbookEntitiesdb;publicMemberRepository(){db=newMvcGuestbookEntities();
}通過構(gòu)造符建立MVCGestbookEntities對象,以便每個操作方法都能夠方便的訪問數(shù)據(jù)庫voidIMemberRepository.Create(Models.Membermember){//指定已被排除字段的預(yù)設(shè)值member.IsAdmin=false;member.AuthCode=Guid.NewGuid().ToString();member.Password=HashPassword(member.Password);//儲存數(shù)據(jù)進數(shù)據(jù)庫
db.AddToMember(member);db.SaveChanges();}.........將會員數(shù)據(jù)寫入數(shù)據(jù)庫,首先排除了綁定數(shù)據(jù)中已有默認值的字段。核心代碼AccountControllerpublicclassAccountController:Controller{IMemberRepository_memberRepository;publicAccountController(){_memberRepository=newMemberRepository();}publicAccountController(IMemberRepositoryr){_memberRepository=r;}先在AccountController中加上構(gòu)造符,讓整個Controller能夠共享同一個IMenberRepository接口來訪問數(shù)據(jù),并且通過構(gòu)造符將MemberRepositroy對象實體化,確保對象可以在整個類中被使用核心代碼AccountController
注冊功能詳細
核心代碼AccountControllerpublicActionResultRegister(
[Bind(Exclude="ID,IsAdmin,AuthCode,CreateTime")]Membermember)在AccountController中我們已經(jīng)定義好了與會員注冊有關(guān)的3個Action,分別是Register(),Register(Membermember),Verify(stringauthCode),Register(),僅用于顯示窗口頁面;Register(Membermember),接受窗口數(shù)據(jù)并自動綁定到Member類;綁定的過程需要對來源數(shù)據(jù)進行格式驗證;將綁定的Member數(shù)據(jù)寫入數(shù)據(jù)庫;Verify(),直接向數(shù)據(jù)庫里查詢會員的郵箱驗證是否成功。
明確排除對特定字段的綁定,以免遭受黑客攻擊。排除字段名稱排除理由ID(系統(tǒng)ID)由數(shù)據(jù)庫自動產(chǎn)生IsAdmin(會員權(quán)限)由數(shù)據(jù)庫自動填入默認值A(chǔ)uthCode(認證碼)注冊用認證碼不應(yīng)由用戶填入,數(shù)據(jù)庫自動生成CreatTime(加入時間)由數(shù)據(jù)庫自動填入當前時間核心代碼AccountController檢查賬戶是否重復的動作在MemberRepository中.IMemberRepository.CheckDuplicate(Models.Membermember)定義;接著就是將數(shù)據(jù)寫入數(shù)據(jù)庫,但在寫入數(shù)據(jù)庫之前必須做以下的判斷:檢查賬戶是否重復;設(shè)定member類型綁定后的默認值。另外,需將密碼經(jīng)過SHA1算法運算后才存儲進數(shù)據(jù)庫中,保證系統(tǒng)的安全性。核心代碼AccountController設(shè)定排除字段的默認值,由于“AuthCode”字段默認是一個新的GUID,所以每個人的都不會重復。設(shè)定默認值的動作與將數(shù)據(jù)寫入數(shù)據(jù)庫的動作都在MemberRepository中IMemberRepository.Create(Models.Membermember)定義;將密碼經(jīng)SHA1加密的動作在MemberRepository中HashPassword(stirngstr)中定義voidIMemberRepository.Create(Models.Membermember){//指定已被排除字段的預(yù)設(shè)值member.IsAdmin=false;member.AuthCode=Guid.NewGuid().ToString();member.Password=HashPassword(member.Password);//儲存數(shù)據(jù)進數(shù)據(jù)庫db.AddToMember(member);db.SaveChanges();}.........將會員數(shù)據(jù)寫入數(shù)據(jù)庫,首先排除了綁定數(shù)據(jù)中已有默認值的字段。核心代碼AccountController最后,Action要向注冊的會員發(fā)出一封驗證信,該信件中必須包含一個超鏈接,可以讓會員單擊該超連接后返回,執(zhí)行Verify動作。privatevoidSendRegisterMail(Membermember){SmtpClientsc=newSmtpClient("locahost");stringverify_url=newUri(//定義URIRequest.Url,
RouteTable.Routes.GetVirtualPath(Request.RequestContext,newRouteValueDictionary(new{
action="Verify",authCode=member.AuthCode})).VirtualPath).AbsoluteUri;
核心代碼AccountControllersc.Send("service@",member.Email,"會員注冊確認信",verify_url);}publicActionResultVerify(stringauthCode)//判斷驗證是否成功{if(_memberRepository.VerifyAuthCode(authCode)){ViewData["Result"]="會員驗證成功!";}else{ViewData["Result"]="找不到此驗證碼,您是否已經(jīng)驗證過了呢?";}returnView();}核心代碼AccountController在確認信發(fā)送的過程中,如果網(wǎng)絡(luò)出現(xiàn)問題或因其他狀況引發(fā)了異常事件,都會造成數(shù)據(jù)已經(jīng)存儲在數(shù)據(jù)庫中,但驗證信卻沒有發(fā)出的情況,導致用戶永遠沒有機會登陸網(wǎng)站。為避免這種情況,應(yīng)該利用“交易處理”(使用TransactionScope類),以確保存儲數(shù)據(jù)與發(fā)送郵件必須都成功執(zhí)行才算。using(TransactionScopetransaction=newTransactionScope()){_memberRepository.Create(member);SendRegisterMail(member);transaction.Complete();}核心代碼AccountController
登陸功能詳細
核心代碼AccountController同注冊功能一樣,登陸功能有關(guān)的Action有LogOn(),LogOn(stringaccount,stringpassword),其中LogOn()用戶顯示窗口,LogOn(stringaccount,stringpassword)用于接受登錄窗口傳來的數(shù)據(jù)LogOn(stringaccount,stringpassword),我們使用FormAuthentication機制來完成以下兩項工作:驗證賬號和密碼是否正確將FormsAuthenticationTicket對象設(shè)定到Cookie中涉及到的Action:ValidateLogon:檢查會員的登陸狀態(tài),返回類型為枚舉類(尚未驗證,成功,失?。〨etRoleByAccount:得到該會員的會員權(quán)限核心代碼AccountControllerpublicActionResultLogOn(stringaccount,stringpassword){LogOnStatusresult=_memberRepository.ValidateLogOn(account,password);
//首先檢查登陸狀態(tài)switch(result){caseLogOnStatus.NotActivated:....................................caseLogOnStatus.Successful:
FormsAuthenticationTicketauthTicket=newFormsAuthenticationTicket(1,
account,DateTime.Now,DateTime.Now.AddMinutes(30),//登錄時間30分鐘到期false,_memberRepository.GetRoleByAccount(account));
stringencTicket=FormsAuthentication.Encrypt(authTicket);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025新版的合作經(jīng)營合同范本
- 住宅小區(qū)水電安裝施工合同
- 音樂教師聘用合同范例
- 2025外債借款合同
- 音樂學校教師聘用合同制定
- 2025技術(shù)許可合同下載
- 二零二五年度房地產(chǎn)公司房地產(chǎn)企業(yè)并購合同3篇
- 多功能加油站租賃合同協(xié)議書
- 二零二五年度工程設(shè)備采購合同終止協(xié)議2篇
- 汽車配件配送司機聘請合同范例
- 門診導診課件
- 大學生職業(yè)生涯規(guī)劃小學英語教育
- 阿甘正傳書籍
- (正式版)JTT 1497-2024 公路橋梁塔柱施工平臺及通道安全技術(shù)要求
- 中國省市地圖模板可編輯模板課件
- 《中國潰瘍性結(jié)腸炎診治指南(2023年)》解讀
- 三年級數(shù)學上冊《寒假作業(yè)》
- 兒童社區(qū)獲得性肺炎的診斷和治療
- 中職班主任德育培訓
- DB-T29-74-2018天津市城市道路工程施工及驗收標準
- 中科院簡介介紹
評論
0/150
提交評論