laravel 自带的用户登录视图路径_Laravel实现找回密码及密码重置,详细操作

Laravel实现找回密码及密码重置功能在php实现与在这里实现会有什么区别呢,下面我们来看看Laravel中的例子,在php中就不介绍了大家都懂的。

8a1c30e414281ca46074d6ef59d0c078.png

忘记密码是应用中常见的场景之一,Laravel5也提供了对密码重置的支持,我们只需稍微做一下配置即可轻松实现重置密码。

1、实现思路

通过给用户注册邮箱发送包含特定令牌的重置密码链接,然后用户登录邮箱通过访问该重置密码链接实现密码的重置。

2、数据表&模型

实现CanResetPasswordContract契约并使用CanResetPasswordtrait的User模型(Laravel自带)
用于存放重置密码令牌的表password_resets(Laravel自带该表对应迁移文件,上一节中已一并创建)

3、创建路由

Laravel自带了用于密码重置的控制器AuthPasswordController,和上一节提到的AuthController位于统一目录下。重置密码相关的业务逻辑都是通过该控制器中使用的ResetsPasswordstrait来实现的。下面我们在routes.php中为重置密码定义相关路由规则:

// 发送密码重置链接路由
Route::get('password/email', 'AuthPasswordController@getEmail');
Route::post('password/email', 'AuthPasswordController@postEmail');
// 密码重置路由
Route::get('password/reset/{token}', 'AuthPasswordController@getReset');
Route::post('password/reset', 'AuthPasswordController@postReset');

4、创建视图

定义好路由之后我们为get请求定义对应视图文件,首先创建发送密码重置链接路由对应视图resources/views/auth/password.blade.php:

<form method="POST" action="/password/email">{!! csrf_field() !!}<div>Email<input type="email" name="email" value="{{ old('email') }}"></div><div><button type="submit">发送密码重置链接</button></div>
</form>

然后创建重置密码路由对应视图resources/views/auth/reset.blade.php:

<form method="POST" action="/password/reset">{!! csrf_field() !!}<input type="hidden" name="token" value="{{ $token }}"><div>Email:<input type="email" name="email" value="{{ old('email') }}"></div><div>新密码:<input type="password" name="password"></div><div>确认密码:<input type="password" name="password_confirmation"></div><div><button type="submit">重置密码</button></div>
</form>

此外我们还要创建一个额外视图——发送密码重置链接的邮件模板视图resources/views/emails/password.blade.php,用于为该邮件提供视图模板:

点击这里重置密码: {{ url('password/reset/'.$token) }}

如果该邮件模板视图文件路径位于其他地方,不要忘了配置config/auth.php中的password.email值与新路径对应。

5、发送邮件配置

接下来我们要做的是配置相关文件实现邮件发送功能为下一步测试做准备。

Laravel使用SwiftMailer库提供的邮件API实现邮件操作,详情可查看邮件文档,这里我们仅作简单配置实现邮件发送,邮件配置文件是config/mail.php:

<?php
return ['driver' => env('MAIL_DRIVER', 'smtp'),'host' => env('MAIL_HOST', 'smtp.mailgun.org'),'port' => env('MAIL_PORT', 587),'from' => ['address' => null, 'name' => null],'encryption' => env('MAIL_ENCRYPTION', 'tls'),'username' => env('MAIL_USERNAME'),'password' => env('MAIL_PASSWORD'),'sendmail' => '/usr/sbin/sendmail -bs','pretend' => false,
];

可见大部分配置在.env文件中设置,这里我的.env文件配置如下:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=25
MAIL_USERNAME=six666@163.com
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=null

用的是163邮箱,其它邮箱参考对应邮箱相关设置项,并将自己的账户信息填写到MAIL_USERNAME和MAIL_PASSWORD。

此外我们还要配置mail.php中的from配置如下:

'from' => ['address' => 'six666@163.com ', 'name' => 'Laravel'],

这里只需要将address和.env文件中的MAIL_USERNAME值相匹配即可。至于name值就是邮箱中发件人名称,可自定义。

做好这一步配置后,接下来即可测试密码重置了。

6、重置密码

在浏览器中访问http://laravel.app:8000/password/email,页面显示如下:

Laravel 发送重置密码邮件

在Email输入框中填写你的注册邮箱,点击“发送密码重置链接”,然后去邮箱中查看收件箱,如果发送成功,可收到一封内容如下的密码重置邮件:

点击这里重置密码:

http://laravel.app:8000/password/reset/96c652e4885591c7ecfcb4f1ecc6f9b877ac1a2ab445e7fb45a89fdfc7283585
此时数据表password_resets中也新增了一条记录,用于保存重置链接令牌:

Laravel保存重置密码token

该令牌默认保存一个小时,要修有效期,可通过编辑config/auth.php中password.expire来实现。

我们将重置密码邮件中的链接拷贝出来粘贴到浏览器地址栏回车,页面显示内容如下:

Laravel重置密码页面

填写该表单后点击重置密码按钮即可完成密码重置。

密码重置成功后,默认跳转链接为/home,我们可以在PasswordController中通过设置$redirectTo/$redirectPath属性的值修改该跳转链接:

protected $redirectPath = '/profile';

这样重置成功后会跳转到http://laravel.app:8000/profile:

test登录成功!

同时password_resets中的对应记录也会被删除。

好了,下次登录就可以使用新密码进行登录认证了。

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要请戳这里链接 或者关注咱们下面的专栏
PHP大神进阶​zhuanlan.zhihu.com
913a231c4f6f222aed89d5b75c7569d1.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yii不能没有提示验证错误信息_安装Mac系统时提示”应用程序副本不能验证 它在下载过程...”的解决方法...

在安装旧版本macOS系统时&#xff0c;比如macOS Mojave 10.14、macOS Sierra、OS X El Capitan、OS X Yosemite、OS X Mavericks等系统&#xff0c;会出现错误无法安装&#xff1a;“应用程序副本不能验证 它在下载过程中可能已遭破坏或篡改”&#xff0c;“This copy of the I…

mysql hugepage_因未配置Hugepage会话数添增悲剧案例

今天一朋友反馈他们的一个数据库hang住了,通过ssh也不能登录系统,他们没有办法重启系统解决问题,现在想让我帮忙找出问题原因分析awr得出询问朋友,他们的库一般session保持在200个左右,这次突然飙升到750以上,属于异常情况分析监听日志看到在截图的时间内,整体访问较频繁,某个i…

ip地址自动切换器_网络IP切换器IPProviders下载_IPProviders官方版下载1.1.22

IPProviders官方版是非常强大的ip切换器助手&#xff0c;可以进行ip地址更换&#xff0c;网关和dns更改。使用方法很简单&#xff0c;用户只需要提前设置好ip地址&#xff0c;需要切换的时候就可以任意切换了&#xff0c;让你可以随意切换更改自己的IP地址&#xff0c;非常方便…

mysql心得体会一百字_MYSQL CPU 100%实例详解

MYSQL CPU 100%实例详解2011/7/2 11:19:19作者&#xff1a;xy我要评论(0)自己的一台主机(Windows 2003 IIS PHP MYSQL )近来 MySQL 服务进程 (mysqld-nt.exe) CPU 占用率总为 100% 高居不下。此主机有10个左右的 database, 分别给十个网站调用。据朋友测试&#xff0c;导致 …

mysql联合索引like_MySQL全文索引、联合索引、like查询、json查询速度大比拼

查询背景有一个表tmp_test_course大概有10万条记录&#xff0c;然后有个json字段叫outline&#xff0c;存了一对多关系(保存了多个编码&#xff0c;例如jy1577683381775)我们需要在这10万条数据中检索特定类型的数据&#xff0c;目标总数据量&#xff1a;2931条SELECTCOUNT(*) …

mysql 代替分号_除了使用分号(;)终止符之外,还有其他可执行MySQL查询的内置命令吗?...

借助以下内置命令&#xff0c;即使不使用分号(;)终止符&#xff0c;MySQL也可以执行查询。自我我们可以通过使用\ G选项来使用此命令。这意味着将当前语句发送到要执行的服务器&#xff0c;并以垂直格式显示结果。当我们使用\ G并在一条语句(单行或多行)中省略分号(;)时&#x…

python在线包安装mysql_python安装mysql的依赖包mysql-python操作

一般情况下&#xff0c;使用pip命令安装即可&#xff1a;[rootdthost27 ~]# pip install mysql-python但是在实际工作环境中&#xff0c;往往会安装失败&#xff0c;这是因为系统缺少mysql的相关依赖组件。所以必须先安装mysql-devel类的包&#xff0c;而且必须要对应好mysql客…

python数组切片赋值后不改变原数组_js数组操作---改变原数组和不改变原数组的方法整理...

一、改变原始数组的方法&#xff1a;1、pop()删除 arrayObject 的最后一个元素&#xff0c;把数组长度减 1&#xff0c;并且返回它删除的元素的值。如果数组已经为空&#xff0c;则 pop() 不 改变数组&#xff0c;并返回 undefined 值。arrayObject.pop() 。2、push()push() 方…

收藏列表放入MySQL还是redis_mysql导入redis

程序遍历MySQL然后插入Redis&#xff0c;效率极低。利用redis-cli命令行工具有一个批量插入模式&#xff0c;是专门为批量执行命令设计的。可以把Mysql查询的内容格式化成redis-cli可用数据格式。1&#xff0c; 根据表创建一个sql&#xff0c;将数据转换为redis可用的格式(1) 表…

java 虚拟机内存不足_JAVA虚拟机内存不够解决办法

软件152笪世海1. 查找matlab根路径.在matlab命令行中敲入:matlabroot显示根路径,如:C:\MATLAB72.查看当前Java虚拟机最大堆内存, 敲入:java.lang.Runtime.getRuntime.maxMemory3.查看Java虚拟机版本.敲入:version -java4.在 $MATLAB\bin\$ARCH 路径下新建java.opts文件.$MATLAB…

Java发送会议邮件 时区_【上海校区】基于JavaMail的日历(会议)邮件发送实现

[Java] 纯文本查看 复制代码/*** 发送会议邀请邮件** param toMailAddress 收件人(邀约人)&#xff0c;支持多个* param mailSubject 邮件主题* param mailContent 邮件内容(建议传入velocity去构建生成的HTML内容)* param summary 摘要&#xff0c;即日历(日程)上显示的标题* …

java saxexception_SAXException

公布的WebService别人调用时出现org.xml.sax.SAXexception发布的WebService别人调用时出现org.xml.sax.SAXexception发布的webservice,返回的一个json&#xff0c;php调用的时候有一定几率出现org.xml.sax.SAXexception&#xff0c;不知道是什么原因3热度com.ibm.ws.jsp.JspCor…

fun函数python_Python函数

Python函数一般函数定义方式def sum(a, b): return ab##返回a与b的和123一些概念与特性嵌套Python的函数是可以嵌套定义的def Fun1(): print("Runing Fun1...") def Fun2(): print("Runing Fun2...") Fun2()12345但是要注意在内部定义就只能在内部使用&…

java 给对象创建实例_Java中创建(实例化)对象的五种方式

Java中创建(实例化)对象的五种方式1、用new语句创建对象&#xff0c;这是最常见的创建对象的方法。2、通过工厂方法返回对象&#xff0c;如&#xff1a;String str String.valueOf(23);3、运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance(…

java markdown转word_一键将 Word 转换为 Markdown

李缘 | | Stata 连享会 (知乎 | 简书 | 码云方法一&#xff1a;Writage Pandoc -- 双剑合璧&#xff01;打开 Writage网页&#xff0c;点击Download&#xff0c;再点击Download Now完成下载网页下载运行安装程序&#xff0c;一般按照默认选项安装就好啦安装重启电脑&#xff0…

java盒图_java合成图片

package com.pbids.sanqin.util;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.net.URL;public class PicUtil {private Font font new Font("宋体", Font.PLA…

mysql+两天前+函数_Mysql 日期函数

一、MySQL 获得当前日期时间 函数1.获取当前日期时间(date time)&#xff1a;now()sysdate()sysdate()和now()的区别在于sysdate() 在函数执行时动态得到值, now() 在执行开始时值就得到了&#xff0c;看下面的例子就明白了&#xff1a;mysql> select sysdate(),sleep(3),s…

java队列优先级_优先级队列-Java的PriorityQueue与最小堆有何不同?

来自Java文档表示为平衡二进制堆的优先级队列&#xff1a;queue [n]的两个子级是queue [2 * n 1]和queue [2 *(n 1)]。 优先级队列由比较器或元素的自然顺序进行排序。这是使用PriorityQueue的最大堆和最小堆的工作代码-class HeapDemo {private final static int HEAP_SIZE …

deepin安装java_Deepin安装Eclipse

Deepin安装Eclipse系统环境:Deepin 15.5软件环境:Eclipse 4.7官网下载最新版elipse(4.7)安装板或压缩版均启动失败(弹框报错)&#xff0c;原因是deepin默认安装的openjdk1.9的版本,而eclipse支持的最低版本为jdk1.8版本,本机又需要jdk1.7版本的,因此需要修改eclipse启动vm参数才…

java定时任务中使用多线程_java项目中如何利用多线程实现一个定时器任务

java项目中如何利用多线程实现一个定时器任务发布时间&#xff1a;2020-11-10 16:04:03来源&#xff1a;亿速云阅读&#xff1a;86作者&#xff1a;Leah今天就跟大家聊聊有关java项目中如何利用多线程实现一个定时器任务&#xff0c;可能很多人都不太了解&#xff0c;为了让大家…