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

2019-09-30 作者:网络时代   |   浏览(132)

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

今天测试自己的QQ企业邮箱配置为Laravel的发送邮箱,故而去配置 .env 和 config/mail.php 文件,但发现官方提供的出现错误。下文主要是测试用,所以代码参考官方教程比较简陋。

1、实现思路

Laravel已经提供了密码重置的接口,首先在路由中(app/Http/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');

详细代码在IlluminateFoundationAuthResetsPasswords.php

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

当然得在resources/views下新建

2、数据表&模型

auth/password.blade.php:

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

图片 1

3、创建路由

auth/reset.blade.php:

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

图片 2

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

emails/password.blade.php:

您正在请求重置密码: {{ url('password/reset/'.$token) }}

// 密码重置路由
Route::get('password/reset/{token}', 'AuthPasswordController@getReset');
Route::post('password/reset', 'AuthPasswordController@postReset');

这样,密码重置的展示页面已经完成,下面来配置QQ企业邮箱。

4、创建视图

Step1

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

图片 3

<form method="POST" action="/password/email">
    {!! csrf_field() !!}

腾讯企业邮箱说明

    <div>
        Email
        <input type="email" name="email" value="{{ old('email') }}">
    </div>

Step2,虽然官网显示发送服务器端口是465,但是在实际测试中发现465无效,25成功!!用户名密码填写你自己的邮箱和密码。

    <div>
        <button type="submit">
            发送密码重置链接
        </button>
    </div>
</form>
然后创建重置密码路由对应视图resources/views/auth/reset.blade.php:

图片 4

<form method="POST" action="/password/reset">
    {!! csrf_field() !!}
    <input type="hidden" name="token" value="{{ $token }}">

.env

    <div>
        Email:<input type="email" name="email" value="{{ old('email') }}">
    </div>

Step3,这里的address和.env的MAIL_USERNAME一致,注意加密方式为ssl,name为发件人昵称

    <div>
        新密码:<input type="password" name="password">
    </div>

图片 5

    <div>
        确认密码:<input type="password" name="password_confirmation">
    </div>

config/mail.php

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

Step4,访问localhost/password/mail

点击这里重置密码: {{ url('password/reset/'.$token) }}
如果该邮件模板视图文件路径位于其他地方,不要忘了配置config/auth.php中的password.email值与新路径对应。

图片 6

5、发送邮件配置

localhost/password/mail

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

Step5,输入邮箱,点击按钮,对应的邮箱就会收到带有token的重置链接,点击链接就会跳转到reset界面重置密码。当你收到这份邮件时说明你已经设置成功了!

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

图片 7

<?php

目标邮箱

本文由澳门新葡亰网址大全发布于网络时代,转载请注明出处:Laravel实现找回密码及密码重置的例子

关键词: