覆盖Laravel 5.3中默认的密码重置过程


Overwrite default password reset process in Laravel 5.3

我目前正在编写一个在后端使用Laravel 5.3的应用程序,我正在寻找一种方法来覆盖默认的密码重置行为。

我需要改变的类是"ResetPassword"位于这里://说明/认证/通知ResetPassword.php

更改的原因是,此文件中生成的重置url不适合我的前端-因为它使用url(),这会将API url而不是前端url放在重置电子邮件中。

您可以在User.php

中重写CanResetPassword的sendPasswordResetNotification()方法
use Illuminate'Notifications'Notifiable;
use App'Notifications'CustomResetPasswordNotification;
public function sendPasswordResetNotification($token)
{
    $this->notify(new CustomResetPasswordNotification($token));
}

并根据您的要求创建CustomResetPasswordNotification.php

查看此处密码重置电子邮件部分了解更多详细信息

我发现了一种快速简便的方法,通过覆盖位于这里的User类来覆盖密码重置过程:

/照明/基础/认证/User.php

基本上,我创建了我自己的版本,像这样:
<?php
namespace App'Traits'Auth;
use Illuminate'Auth'Authenticatable;
use Illuminate'Database'Eloquent'Model;
use App'Traits'Auth'Passwords'CanResetPassword;
use Illuminate'Foundation'Auth'Access'Authorizable;
use Illuminate'Contracts'Auth'Authenticatable as AuthenticatableContract;
use Illuminate'Contracts'Auth'Access'Authorizable as AuthorizableContract;
use Illuminate'Contracts'Auth'CanResetPassword as CanResetPasswordContract;
class User extends Model implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword;
}

我把它保存到/App/Traits/Auth,现在在我的User模型中使用它。

<?php
namespace App;
use Illuminate'Notifications'Notifiable;
use App'Traits'Auth'User as Authenticatable;
class User extends Authenticatable
{
    use Notifiable;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

一旦完成,你可以创建你自己的版本的"CanResetPassword"特征,并替换通知类,并进行必要的调整。

下面是一个替换"CanResetPassword"特性的例子:

namespace App'Traits'Auth'Passwords;
use App'Notifications'CustomResetPassword as ResetPasswordNotification;
trait CanResetPassword
{
    /**
     * Get the e-mail address where password reset links are sent.
     *
     * @return string
     */
    public function getEmailForPasswordReset()
    {
        return $this->email;
    }
    /**
     * Send the password reset notification.
     *
     * @param  string  $token
     * @return void
     */
    public function sendPasswordResetNotification($token)
    {
        $this->notify(new ResetPasswordNotification($token));
    }
}