加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

一步步开发自己的博客 .NET版(3、注册登录功能)

发布时间:2020-12-15 21:24:37 所属栏目:asp.Net 来源:网络整理
导读:h1 id="autoid-0-0"前言? 这次开发的博客主要功能或特点:? ? 第一:可以兼容各终端,特别是手机端。? ? 第二:到时会用到大量html5,炫

<h1 id="autoid-0-0">前言?

这次开发的博客主要功能或特点:? ? 第一:可以兼容各终端,特别是手机端。? ? 第二:到时会用到大量html5,炫啊。? ? 第三:导入博客园的精华文章,并做分类。(不要封我)? ? 第四:做个插件,任何网站上的技术文章都可以转发收藏 到本博客。

所以打算写个系类:《》

? ??演示地址:??? ? 群内共享源码:

? ? 今天主要来分析下注册和登录。关于这两个功能的实现我相信大家都有自己的经验,说容易可以做的很容易 说复杂可以做的很复杂。

? ? 其实说白了,注册就是往数据库里面插入一条数据,登录就是查询数据库里面是否存在这条数据。当然,还可以有自己的规则验证。如:用户名不能重复,密码不能为空...

? ? 为了防止别人恶意注册 可以加个邮箱验证。那我们用什么邮箱发邮件通知呢,163 Mail ? QQ Mail ?,那我们做站长的 也忒掉面子了吧。起码也得来个和你域名相关的企业邮箱啊,是不?(*^__^*)

? ? 在这里我给大家分享一个免费的企业邮箱。?

? ? ? 关于免费的企业有申请,这里就不做过多介绍了,申请后绑定自己的域名就ok了。

? ? ? 接下来,开始分析我的注册和登录功能的实现。

获取激活码和激活

? ? ?这里首先说下获取激活码和激活处理。首先什么是激活码? 这里的激活码主要是用来验证。第一、证明邮箱用户确实存在,这样可以有效防止恶意注册。第二、只有邮箱用户才可以做用户信息修改处理,如 密码修改。因为需要用到激活码的地方“可能”比较多,所有 ? 我们把 这两个方法 分离出来。? ??

获取激活码

? ? 获取激活码,其实也就是 先生成一个随机数,先保存到Session,然后通过邮件发送到注册邮箱。当然 这里有个重要的地方,那就邮件的发送帮助类。

</span><span style="color: #0000ff;"&gt;#region</span> Eail 属性 <span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;string</span> _mailFrom = <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;system@haojima.net</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;; </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 发送者 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;string</span> mailFrom { <span style="color: #0000ff;"&gt;get</span> { <span style="color: #0000ff;"&gt;return</span> _mailFrom; } <span style="color: #0000ff;"&gt;set</span> { _mailFrom =<span style="color: #000000;"&gt; value; } } </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 收件人 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;string</span>[] mailToArray { <span style="color: #0000ff;"&gt;get</span>; <span style="color: #0000ff;"&gt;set</span><span style="color: #000000;"&gt;; } </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 抄送 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;string</span>[] mailCcArray { <span style="color: #0000ff;"&gt;get</span>; <span style="color: #0000ff;"&gt;set</span><span style="color: #000000;"&gt;; } </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 标题 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;string</span> mailSubject { <span style="color: #0000ff;"&gt;get</span>; <span style="color: #0000ff;"&gt;set</span><span style="color: #000000;"&gt;; } </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 正文 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;string</span> mailBody { <span style="color: #0000ff;"&gt;get</span>; <span style="color: #0000ff;"&gt;set</span><span style="color: #000000;"&gt;; } </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 发件人密码 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;string</span> mailPwd { <span style="color: #0000ff;"&gt;get</span>; <span style="color: #0000ff;"&gt;set</span><span style="color: #000000;"&gt;; } </span><span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;string</span> _host = <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;smtp.haojima.net</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;; </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; SMTP邮件服务器 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;string</span> host { <span style="color: #0000ff;"&gt;get</span> { <span style="color: #0000ff;"&gt;return</span> _host; } <span style="color: #0000ff;"&gt;set</span> { _host =<span style="color: #000000;"&gt; value; } } </span><span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;bool</span> _isbodyHtml = <span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;; </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 正文是否是html格式 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;bool</span> isbodyHtml { <span style="color: #0000ff;"&gt;get</span> { <span style="color: #0000ff;"&gt;return</span> _isbodyHtml; } <span style="color: #0000ff;"&gt;set</span> { _isbodyHtml =<span style="color: #000000;"&gt; value; } } </span><span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;string</span> _nickname = <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;嗨-博客 系统通知</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;; </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 发送者昵称 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;string</span><span style="color: #000000;"&gt; nickname { </span><span style="color: #0000ff;"&gt;get</span> { <span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; _nickname; } </span><span style="color: #0000ff;"&gt;set</span><span style="color: #000000;"&gt; { _nickname </span>=<span style="color: #000000;"&gt; value; } } </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 附件 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;string</span>[] attachmentsPath { <span style="color: #0000ff;"&gt;get</span>; <span style="color: #0000ff;"&gt;set</span><span style="color: #000000;"&gt;; } </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;优先级别</span> <span style="color: #0000ff;"&gt;private</span> MailPriority _Priority =<span style="color: #000000;"&gt; MailPriority.Normal; </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 优先级别 默认正常优先级 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; MailPriority Priority { </span><span style="color: #0000ff;"&gt;get</span><span style="color: #000000;"&gt; { </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; _Priority; } </span><span style="color: #0000ff;"&gt;set</span><span style="color: #000000;"&gt; { _Priority </span>=<span style="color: #000000;"&gt; value; } } </span><span style="color: #0000ff;"&gt;#endregion</span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;bool</span><span style="color: #000000;"&gt; Send() { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;使用指定的邮件地址初始化MailAddress实例</span> MailAddress maddr = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; MailAddress(mailFrom,nickname); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;初始化MailMessage实例</span> MailMessage myMail = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; MailMessage(); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;向收件人地址集合添加邮件地址</span> <span style="color: #0000ff;"&gt;if</span> (mailToArray != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) { </span><span style="color: #0000ff;"&gt;for</span> (<span style="color: #0000ff;"&gt;int</span> i = <span style="color: #800080;"&gt;0</span>; i < mailToArray.Length; i++<span style="color: #000000;"&gt;) { myMail.To.Add(mailToArray[i].ToString()); } } </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;向抄送收件人地址集合添加邮件地址</span> <span style="color: #0000ff;"&gt;if</span> (mailCcArray != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) { </span><span style="color: #0000ff;"&gt;for</span> (<span style="color: #0000ff;"&gt;int</span> i = <span style="color: #800080;"&gt;0</span>; i < mailCcArray.Length; i++<span style="color: #000000;"&gt;) { myMail.CC.Add(mailCcArray[i].ToString()); } } </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;发件人地址</span> myMail.From =<span style="color: #000000;"&gt; maddr; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;电子邮件的标题</span> myMail.Subject =<span style="color: #000000;"&gt; mailSubject; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;电子邮件的主题内容使用的编码</span> myMail.SubjectEncoding =<span style="color: #000000;"&gt; Encoding.UTF8; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;电子邮件正文</span> myMail.Body =<span style="color: #000000;"&gt; mailBody; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;电子邮件正文的编码</span> myMail.BodyEncoding =<span style="color: #000000;"&gt; Encoding.Default; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;邮件优先级</span> myMail.Priority =<span style="color: #000000;"&gt; Priority; myMail.IsBodyHtml </span>=<span style="color: #000000;"&gt; isbodyHtml; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;在有附件的情况下添加附件</span> <span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; { </span><span style="color: #0000ff;"&gt;if</span> (attachmentsPath != <span style="color: #0000ff;"&gt;null</span> &amp;&amp; attachmentsPath.Length > <span style="color: #800080;"&gt;0</span><span style="color: #000000;"&gt;) { Attachment attachFile </span>= <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;foreach</span> (<span style="color: #0000ff;"&gt;string</span> path <span style="color: #0000ff;"&gt;in</span><span style="color: #000000;"&gt; attachmentsPath) { attachFile </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Attachment(path); myMail.Attachments.Add(attachFile); } } } </span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt; (Exception err) { </span><span style="color: #0000ff;"&gt;throw</span> <span style="color: #0000ff;"&gt;new</span> Exception(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;在添加附件时有错误:</span><span style="color: #800000;"&gt;"</span> +<span style="color: #000000;"&gt; err); } SmtpClient smtp </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; SmtpClient(); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;指定发件人的邮件地址和密码以验证发件人身份</span> smtp.Credentials = <span style="color: #0000ff;"&gt;new</span> System.Net.NetworkCredential(mailFrom,mailPwd);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;115 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;设置SMTP邮件服务器</span> smtp.Host =<span style="color: #000000;"&gt; host; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; smtp.EnableSsl = true; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;smtp.Port = 587;</span> <span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;将邮件发送到SMTP邮件服务器</span>

<span style="color: #000000;"> smtp.Send(myMail);
<span style="color: #0000ff;">return <span style="color: #0000ff;">true<span style="color: #000000;">;

        }
        </span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt; (System.Net.Mail.SmtpException ex)
        {
            </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #0000ff;"&gt;false</span><span style="color: #000000;"&gt;;
        }

    }
}</span></pre>
?

? ? 用法:

EmailHelper email = ======

效果图:

激活

? ? ? 激活,复制你邮件收到的激活码 和 session 里面保存的数据数 ?比较。如果 相等 则表示验证成功。然后,该注册 的注册 、该改密码的改密码。(验证成功后 可以发个邮件告知 注册成功 并发送注册信息 以免 注册用户 忘记 注销信息)

数据验证

? ? ? 在注册和登录的过程中,有多处地方需要验证。如:用户名密码 必填非空 邮箱格式比较正确。然而,在MVC里的特性验证用起来 那个爽歪歪的。

? ? ? 这里来说说我的用法()。

? ? ? 特性验证:?Required 非空? UserName { ; ; }?

? ? ? 我们直接把特性标识在属性的上面就可以了,如果在数据保存的时候 验证不通过 则会抛出自定义的 异常信息。不过这里有个问题,我们的实体类都是通过 tt 文件自动生成的。我们加上去的特性 在下次保存 tt 文件的时候 又会清空。不过微软的猿们 早就替我们想好了。tt 生成的是部分类。那么 我们也就可以在外部生成 一个部分类来 加特性 然后在编译的时候 自动合并。?

? ? ?这里是后台验证。当然 我们不能只仅仅验证后台,要是能直接在前台就能 屏蔽 验证不通过的请求 也能减轻服务器的 负担。接下来要说的 就是 “爽歪歪”的。我们在后台加的特性验证,可以直接在前台也做验证。好神奇,这是怎么实现的呢?其实我们看看生成的html代码 就大概会猜到了。

? ? ?首先 我们在View 的?Razor视图?使用的强类型的“声明”。??

? ? ?然后 在View的使用?? t.UserName) ? ?可以直接使用拉姆达表达式 爽啊。

? ? ?我们可以看到前台生成的html代码?

= data-val= data-val-required= id= name= type= value=>?

? ? ?看到这里 我们是不是已经明白了点什么呢? 验证信息 直接带到了 标签里面。当然 ? 这仅仅只是生成在了html标签里面。其实 ?我们现在还不能完成前台的验证。我们要真的能自动在前台验证的话?? 需要引入一些 微软 提供的js文件。??? 看名字就知道 ? 引用之前 还需引用jquery 文件。

? ? 在此 前台验证 效果已经ok了。那仅仅 验证了 也还是不够的。起码也得有个 提示信息吧。? t.UserName)?自动输出 验证不通过的 信息提示。

? ? 总结下使用MVC中的 特性来验证:

? ? 第一、需要在后台的模型类 里面加上特性:如? UserName { ; ; }? (这里仅仅完成了后台验证)

? ? 第二、需要在前台引入两个js文件??(这里完成了前台验证)

? ? 第三、在View文件中 生成控件 和验证提示信息。? t.UserName) @Html.ValidationMessageFor(t => t.UserName)?

? ? 效果图:

? ? 演示地址:? ?

? ? 注册和登录中最重要的 获取激活码、激活和数据验证都已经分析完了,那么下面就简单的说下注册、登录和重置密码吧。

注册

? ? ?首先关于注册信息包含:用户名、密码、昵称、邮箱。

? ? ?用户名:必填非空非重复,主要用来验证登录 和url中的链接。如:? ?中的?zhaopei。

? ? ?密码:必填非空,主要用来验证登录。

? ? ?昵称:非必填,主要用来友好显示在你的个人主页、方便别人记住你。如果是空,则用 用户名替代。

? ? ?邮箱:必填非空非重复,主要用来 注册的时候验证激活、重置密码的时候验证激活 和 评论邮件通知、站内消息通知(评论邮件通知 站内消息通知 功能暂未完成)? ?

? ? ?效果图:

登录

? ? ?1.如果登录成功。保存登录用户信息到session。

? ? ?2.如果勾选了“自动登录” 则保存 用户信息到 客户端 cookie,下次取session 时如果 session 为null ?在看cookie是否有 有效用户信息。

? ? ?在这里 我还在数据库里面 加了个 “IsLock” 是否被锁定。如果 检测到 发布恶意 ?或违法内容 可以用来 锁定用户。使之不能登录。

? ? ?效果图:

重置密码

? ? ? 重置密码,也就是修改密码。

? ? ? 需要用到的字段:邮箱、新密码

? ? ? 发送验证码到邮箱,然后判断输入的验证码是否正确。如果正确 则把密码修改成新密码。

? ? ? 效果图:

总结

? ? ? ? 这里主要是分析介绍了下 博客用户的 注册、登录和密码重置。其主要的共用模块功能有 获取激活码、触发激活 和 数据验证。

? ? ? ? 注册流程:填写注册信息-> 验证信息-> 邮件验证-> 注册成功

? ? ? ? 登录流程:填写登录信息-> 数据库查询->?

? ? ? ? ? ? ? ? ? ? ? 1.锁定-> 发送邮箱激活码-> 激活 ->登录成功

? ? ? ? ? ? ? ? ? ? ? 2.未锁定->登录成功

? ? ? ? 演示地址:??(界面丑是丑了点,后期再美化)

? ? ? ? 如果您对本篇文章感兴趣,那就麻烦您点个赞,您的鼓励将是我的动力。?当然您还可以加入QQ群:嗨 博客讨论。

? ? ? ? 如果您有更好的处理方式,希望不要吝啬赐教。

? ? ? ??一步步开发自己的博客 .NET版系列:

? ? ? ? 本文链接:

? ? ? ? 开源地址:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读