Laravel实现找回密码及密码重置的例子

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

1、实现思路

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

2、数据表&模型

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

3、创建路由

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

// 发送密码重置链接路由
Route::get('password/email', 'Auth\PasswordController@getEmail');
Route::post('password/email', 'Auth\PasswordController@postEmail');

// 密码重置路由
Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
Route::post('password/reset', 'Auth\PasswordController@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=yaojinbu@163.com
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=null

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

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

'from' => ['address' => 'yaojinbu@163.com ', 'name' => 'Laravel学院'],
这里只需要将address和.env文件中的MAIL_USERNAME值相匹配即可。至于name值就是邮箱中发件人名称,可自定义。

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

6、重置密码

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

Laravel 发送重置密码邮件

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

点击这里重置密码:

ttp://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中的对应记录也会被删除。

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

时间: 2024-09-11 06:55:18

Laravel实现找回密码及密码重置的例子的相关文章

五步教你找回win7系统密码

win7系统忘了密码怎么办?如何找回windows7系统密码?看了本篇文章您会发现这些问题都不成问题了: Windows 7 SP1 中文旗舰版是由微软公司(Microsoft)开发的操作系统,系统之家为提供win7官方原版系统下载,Windows 7 可供家庭及商业工作环境.笔记本电脑.平板电脑.多媒体中心等使用.第一步:于cmd在系统目录,文件更改首先要获得文件所有权.打开"D:windowssystem32"(假设Windows7安装在D 盘),右击"arrator.e

mysql的密码丢失问题--重置过密码之后也无法用密码登陆,不输入密码可以登陆

问题描述 mysql的密码丢失问题--重置过密码之后也无法用密码登陆,不输入密码可以登陆 解决方案 将Apache->Alias->http://localhost/phpmyadmin->Edit alias打开 将其中的 Options Indexes FollowSymLinks ExecCGI AllowOverride all Order Deny,Allow Deny from all Allow from 127.0.0.1 Allow from ::1 Allow fro

QQ用密保手机找回及修改密码教程

给各位QQ软件的用户们来详细的解析分享一下QQ用密保手机去找回以及修改密码的教程. 教程分享: 步骤一:打开QQ程序,在QQ登录框里会有"找回密码"选项(如图),我们就点击找回密码选项.   步骤二:点击找回密码后跳出一个页面,根据实际情况填好帐号.密码类型.验证码选项,点击下一步.   步骤三:点击找回密码后可以看到有两种修改密码的方式,一是密保工具改密,二是短信改密,按要求发送验证信息即可.         步骤五:选择以上任一种方式验证成功后,则可到达修改密码页面进行新密码设定.

实现修改密码时密码框显示保存到cookie的密码

 修改密码时密码框显示保存到cookie的密码,只要在input框中加入AUTOCOMPLETE="OFF" 即可,感兴趣的朋友可以了解下 只要在input框中加入AUTOCOMPLETE="OFF" 即可  代码如下: <input name="pwd" id="password" type="password" class=" required" AUTOCOMPLETE=&q

vc/c++-求!智能IC卡及智能密码钥匙密码应用接口规范功能实现代码

问题描述 求!智能IC卡及智能密码钥匙密码应用接口规范功能实现代码 智能IC卡及智能密码钥匙密码应用接口规范功能实现代码 vc /win32 C++封装 解决方案 http://download.csdn.net/detail/lj890125/4166701

java编程中我想用显示密码把密码显示出来了然而登录却有错 求解 急用 (我想了一天实在没法了)

问题描述 java编程中我想用显示密码把密码显示出来了然而登录却有错 求解 急用 (我想了一天实在没法了) import javax.swing.*; import java.awt.*; import java.awt.event.*; public class weixin extends JFrame implements ActionListener { JPanel panmain; //面板 JLabel lblname,lblpassword,lblphoto; //标签 JLab

android-安卓智能判断密码框密码强度(求解)

问题描述 安卓智能判断密码框密码强度(求解) 智能判断密码框密码强度 求解 求条件.想法.正则表达式最好 下面附图 解决方案 密码强度判断判断密码强度判断密码强度 解决方案二: 判断一下密码的构成,根据密码的构成方式 进行强弱等级的判断 解决方案三: 实时检查输入,判断是否符合某一项预设的密码强度条件,符合就设置标记,然后综合已经设置的标记,显示当前的强度信息 解决方案四: textview内容变化时检查,可以从下面几个方面考虑:1.字符数.2.字母,数字,特殊符号有没有(可以转换成ascii编

如何在notes服务器端设置所有人下次登陆修改密码和密码复杂性还有多久修改密码

问题描述 大神们好新入一公司公司有台notes服务器但是我不懂notes啊有没有大神能跟我说说怎么在notes服务器上设置大家下次登陆修改密码和密码的复杂性,还有怎么设置2个月必须修改密码.还有压缩一个人数据库的命令是啥忘了说了版本是notes8.5的 解决方案 解决方案二:友情支持哦,这个你只能网上找资料了.找个专业的notes论坛.最好能FanqiangYouTube有视频资料.解决方案三:1.密码的复杂程序在注册时就定好了,至于怎么复杂日后再改2.管理配置文档里只有会话超时设置,默认30分

绑定手机号不用了怎样找回支付宝支付密码?

  在百度输入支付宝,选择搜索结果中的标有官网字样的结果进入,一般在第一个. 来到支付宝首页,在页面左侧偏上位置选择账户设置,在其中选择支付密码中的找回密码. 进入找回密码界面后,我们可以看到找回的方式共有四种,而如果我们绑定手机不用了之后,就不能用前两种,只能采用后两种方式. 我们先来看通过"安全保护问题+电子邮箱"找回,需要验证身份,重置支付密码,直至找回成功. 我们再来看通过通过人工服务找回,需要填写申请单,上传身份证件图片,会在48小时内受理,要耐心等待;依次需要确认邮箱-收邮