当前位置: 首页 > 知识库问答 >
问题:

在Laravel 5.4中定制忘记密码的电子邮件

樊琦
2023-03-14

我正在尝试在Laravel中自定义密码重置电子邮件。

我必须重写此函数:

namespace Illuminate\Auth\Passwords;

use Illuminate\Auth\Notifications\ResetPassword as ResetPasswordNotification;
use Illuminate\Http\Request;


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));

}

这是我的尝试:

 public function sendPasswordResetNotification($token, Requests $request)
{
Mail::to($request->email)->send(new newpassword($token));
}

我得到这个错误:

Illumb\Foundation\Auth\User::sendPasswordResetNotification($token,Illumb\Http\Request$Request)的声明必须与Illumb\Contracts\Auth\CanResetPassword::sendPasswordResetNotification($token)兼容

共有2个答案

郑帅
2023-03-14

我很惊讶你会这么长时间来定制电子邮件。

试试这个吧:

php artisan vendor:publish

然后在这里修改文件

/resources/views/vendor/notifications/email.blade.php

非常适合我们使用。

user@default:~/laravel_5.4$ php artisan vendor:publish
Copied Directory [/vendor/laravel/framework/src/Illuminate/Pagination/resources/views] To [/resources/views/vendor/pagination]
Copied Directory [/vendor/laravel/framework/src/Illuminate/Notifications/resources/views] To [/resources/views/vendor/notifications]
Copied Directory [/vendor/laravel/framework/src/Illuminate/Mail/resources/views] To [/resources/views/vendor/mail]
Publishing complete.

现在,如果需要更改副本,并且需要原始ResetPassword类使用的奇特按钮,可以在User.php类中扩展mail类,如下面的示例所示。

以下是我们的一份非常好的示例:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Notifications\Messages\MailMessage;

class User extends Authenticatable
{
    use Notifiable;

    protected $table = 'Users';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'firstName',
        'lastName',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * Sends the password reset notification.
     *
     * @param  string $token
     *
     * @return void
     */
    public function sendPasswordResetNotification($token)
    {
        $this->notify(new CustomPassword($token));
    }
}

class CustomPassword extends ResetPassword
{
    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->line('We are sending this email because we recieved a forgot password request.')
            ->action('Reset Password', url(config('app.url') . route('password.reset', $this->token, false)))
            ->line('If you did not request a password reset, no further action is required. Please contact us if you did not submit this request.');
    }
}
夹谷晋
2023-03-14

如果您阅读了错误,则表明您的类与CanResetPassword不兼容。如果你看那个。。。。

interface CanResetPassword
{
    /**
     * Get the e-mail address where password reset links are sent.
     *
     * @return string
     */
    public function getEmailForPasswordReset();
    /**
     * Send the password reset notification.
     *
     * @param  string  $token
     * @return void
     */
    public function sendPasswordResetNotification($token);
}

您可以看到函数sendPasswordResetNotify应该只接受一个参数,$Token。因此,您需要从方法的签名中删除Request$ask作为参数。

为了获取请求,您将需要在sendPasswordResetNotify方法中使用函数请求()

public function sendPasswordResetNotification($token)
{
    Mail::to(request()->email)->send(new newpassword($token));
}
 类似资料:
  • 我正在使用AWS Cognito来管理我的用户,并希望在“忘记密码”流中控制发送给用户的电子邮件的措辞。 我的解决方案基于以下几点:https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-message.html 基本上,AWS允许您定义一个Lambda函数,在需要发送电子邮件时调用该函数,

  • 我使用laravel 5.6,并成功地将视图作为电子邮件发送。 我使用以下代码: 我唯一的问题是密码重置。我知道我可以自定义一点模板,但是如何覆盖默认的电子邮件模板并发送我自己的视图? 我尝试写我自己的ResetPassword通知: 但我只能翻译电子邮件。我想要的是根据我自己的模板发送我自己的视图。 可能吗? 谢谢你的帮助。

  • 模板文件:User/forgot_password.html <form class="form-horizontal js-ajax-form" action="{:U('user/login/doforgot_password')}" method="post"> <label class="control-label" for="input_email">注册邮箱</label>

  • 忘记密码时 若要使用此机能,可能需先更新系统软件。 忘记密码时,请遵循以下方法重新设定密码。 1. 进入主选单的(PlayStation®Netrowk)后,选择(账户管理)或(PlayStation®Store)。 2. 显示需输入登入ID(电子邮件地址)与密码的画面时,选择[忘记密码时]。 3. 输入登入ID(电子邮件地址)及出生日期。 4. 选择变更密码的方法。 回答[密码提示问题]来变更密

  • 后台密码忘记了怎么办? 1.如果你已经在后台配置了,邮件发送功能且邮箱是你的真实邮箱,可以到前台登录页找回密码; 2.如果你是后台管理员,你可以使用 sp_password()方法生成一下新的密码; 你只要在任何一个前台可以访问控制器里,如application/Portal/Controller/IndexController.class.php <?php namespace Portal\C

  • 首先,我想让用户重置他们的密码。已经有一个用户正在使用的应用程序,所以最好在那里集成它。我在其中创建了一个小的环形模块,并尝试通过与Keycloak password Embright表单提供的机制相同的机制来触发密码遗忘邮件。但我想不通他们是如何创建这个动作链接的: https://example.com/keycloak/auth/realms/my-realm/login-actions/r