我目前正在编写一个在后端使用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));
}
}