Laravel-5-8学习


title: Laravel-5.8学习
date: 2019-05-13 14:07:10
tags:
- PHP
- Laravel 5.8
- 邮箱认证
categories:
- Study
- PHP
- Laravel-5.8


用Laravel框架自带的邮件发送机制实现登录注册认证。


前言

Web应用开发课上的实验,之前实验2的时候是自己写php代码实现登录、注册、密码找回功能(不用邮箱验证),当时还自己看了看jquery、bootstrap4、Ajax简单写了写,本来也打算搬到这个博客上来,但是过了一两个礼拜,忘记自己当时是怎么一步步写的了,惭愧惭愧。。
所以这次实验3,趁刚做完,赶紧来记录一下


Laravel基础

这次实验我也只是对Laravel快速过了一下,是看的它的中文文档,贴在下面了。
Laravel 5.8中文文档

下面说下这个文档咋用,先是进行Laravel安装,然后用laravel新建一个项目,然后就会生成一系列目录,然后了解下各个目录的作用,都存放写什么东西。
明白各个目录的作用后,理清一下路由、视图、控制器三个的概念,可以写几个简单的路由和控制器和blade视图文件帮助理解,其实按我自己的理解就是路由建立访问路径和处理函数直接的映射,路由可以通过xxxxController@xxxfunction指定控制器,也可以通过view(xxx)指定xxx.blade.php视图文件。视图是回显的前端代码,控制器处理后端操作。(仅为个人理解,错了勿喷)
这些文档里都有,相信比我讲要清楚,所以就不详细写了


对上面的Laravel基础了解过了之后,就可以搞起了,下面就写如何用Laravel自带的邮件发送机制实现登录、注册认证、密码重置功能。(虽然文档里也有,但是文档有些细节没有挑明),因为是先写了实验报告,所以下面就按照实验报告格式写吧。

实验目的和要求

  1. 实验目的:按照前后端混合的开发形式,基于Laravel框架,实现简单和安全的用户注册和登录。
  2. 实验要求:(1)实现Email形式的注册功能和相应的登录功能,注册部分具备邮件激活功能(使用Laravel的邮件发送机制);(2)实现忘记密码时通过重置密码邮件设置新密码(使用Laravel的邮件发送机制);(3)网页内容基于Laravel的Blade模板;(4)在hosts文件里自定义一个域名,实现通过域名来访问;(5)使用路由机制设计访问路径

实验设计思路

因为laravel自带登录认证、邮件发送、密码重置等功能。于是直接调用修改即可。

登录认证功能

使用php artisan make:auth命令生成认证所需要的路由和视图,然后就可以使用/login和/register访问登录和注册页面。这里我通过修改生成的resources\views\layouts\下的app.blade.php视图文件的导航栏部分代码,给导航栏换了背景颜色。


image

只通过上面php artisan make:auth命令生成路由和视图还不够,我们可以尝试输入信息注册,结果会发现报错,报错原因是因为没有生成数据库里的users这些表。于是我们要在.env文件里面配置选择数据库。如下图是我的配置。


image

选择好数据库,配置好数据库用户名和密码后,再使用php artisan migrate生成larave登录认证需要的表。如下图,命令执行后,数据库lab中自动生成3张表。


image

然后再尝试注册和登录功能,发现可以正常执行,输入注册信息后,会直接自动登录,而数据库users表也会插入注册填入的信息。


image

注册邮箱验证

上一步中实现了登录和注册功能,不过没有实现邮箱认证。所以这一步就来实现邮箱认证。
首先Laravel 也提供了便捷方法来发送和验证邮箱验证请求,我们只需要在app\User.php调用。如下图划红线部分,即为使用代码。


image

调用了验证邮箱方法后,我们需要对路由进行配置,使其必须通过邮箱验证才能进行登录,而不是填写完注册进行后直接跳转登录。所以我们可以使用路由中间件来限制未验证邮箱用户不能登录或者访问给定路由。routes\web.php里相应代码如下图


image

实现路由后,我们的网页就具有了邮箱验证功能,但是要实现验证功能的话,必须要发送邮件,邮件模版laravel自带,邮件发送逻辑是在 User 模型类的 sendEmailVerificationNotification 中完成的,无需手动编写,但是发送邮件的邮箱需要我们配置。于是就接着配置邮箱。在.env文件中进行配置,具体可参考https://laravelacademy.org/post/9743.html 进行配置。配置好邮箱后,就能进行认证邮件发送了。

密码重置

跟邮件认证功能一样,密码重置功能laravel框架已经自己内置了,我们要做的就是调用它。所以跟上一步一样,在使用 Laravel 提供的密码重置功能之前,先验证 App\User 模型是不是实现了 Illuminate\Contracts\Auth\CanResetPassword 契约。然后使用 Illuminate\Auth\Passwords\CanResetPassword trait 来包含实现该接口需要的方法。如下图红线代码部分。


image

因为重置密码的路由和视图在laravel进行php artisan make:auth时已经自动生成了,所以现在可以直接通过/password/reset或者点击登录页面的For got your password?链接进入重置密码页面。如下图


image

配置Apache虚拟主机和hosts文件

基本的登录、注册认证、密码重置功能都已经实现了,下面就是配置Apache虚拟主机和hosts文件实现自定义域名访问了。
先在Apache的配置文件http.conf文件里开启虚拟主机功能,即找到Virtual hosts选项,将该行下面的# Include conf/extra/httpd-vhosts.conf取消注释。如下图

image

然后在conf/extra/httpd-vhosts.conf文件里配置虚拟主机。配置完后重启apache。然后再修改hosts文件,使127.0.0.1指向apache定义的虚拟域名。如我的虚拟主机域名为yt.weblab.com

这里配置Apache的虚拟主机容易出现错误,比如定义了虚拟主机后,只能通过虚拟主机访问,而localhost访问失效。或者是能用虚拟主机和localhost访问,但是只能访问到index.php,而其他登录、注册等路径均为404。
我也是踩着坑过来的(2333~),下面就放一下我最终的Apache虚拟主机配置代码吧。

<VirtualHost *:80>
    ServerName localhost        # 定义localhos解决定义虚拟主机后localhost无法访问
    DocumentRoot "D:\\laragon\\www\\library\\public"

    <Directory "D:\\laragon\\www\\library">     # 解决除index.php外其余页面404问题
        Options FollowSymLinks ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "D:\\laragon\\www\\library\\public"
    ServerName www.yt.weblab.com
    ErrorLog "logs/yt.weblab.com-error.log"
    CustomLog "logs/yt.weblab.com-access.log" common

    <Directory "D:\\laragon\\www\\library"> # 配置Directory,解决除index.php外其余页面404问题
        Options FollowSymLinks ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
</VirtualHost>


程序测试

测试一下实验的功能

  1. 先访问登录页面,输入邮箱等信息进行注册。


    image
  2. 点击注册按钮后,页面跳转如下图示,这是resources\views\auth\verify.blade.php视图的显示效果。表明我们的认证邮件已经发送出去。


    image
  3. 接下来我们去我们填入的邮箱里查找验证邮件,发现收取成功,于是点击蓝色按钮进行认证。点击后,成功实现了自动登录


    image

    image
  4. 然后我们测试密码重置功能,进入密码重置页面,输入邮箱,然后点击发送重置密码链接按钮。可以看到,页面出现提示We have e-mailed your password reset link!,表明邮件发送成功


    image
  5. 然后再查看我们的邮箱,发现收到了密码重置邮件


    image
  6. 点击Reset Password按钮,会跳转到下图页面


    image
  7. 在上图重置密码页面输入新密码后,点击重置按钮,即可重置密码。如下图,输入新密码后,会自动登录,同时回显Your password has been reset!提示密码重置成功。


    image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容