web-dev-qa-db-ja.com

laravelでパスワードのリセットメールの件名を変更するにはどうすればよいですか?

私はLaravelの初心者です。現在、私はこのフレームワークを学んでいます。私の現在のLaravelバージョンは5.3です。

php artisan make:authを使用して認証を足場にしています。すべて正常に動作しています。また、.envファイルでgmail smtpを、config directgor​​yでmail.phpを構成しました。すべてが完全に機能しています。しかし、デフォルトでは、パスワードを忘れた場合のメールの件名がReset Passwordになっています。それを変えたいです。

ブログを見ました。ブログを見つけました。私は自分のサイトにそれを実装しました。しかし、同じ出力が来ます。

私はこれらのリンクをたどりました-

https://laracasts.com/discuss/channels/general-discussion/laravel-5-password-reset-link-subject

https://laracasts.com/discuss/channels/general-discussion/reset-password-email-subject

https://laracasts.com/discuss/channels/laravel/how-to-override-message-in-sendresetlinkemail-in-forgotpasswordcontroller

16
Chinmay235

パスワードリセットメールの件名は変更できますが、追加の作業が必要になります。まず、 ResetPassword 通知の独自の実装を作成する必要があります。

新しい通知クラスinside _app\Notifications_ディレクトリを作成し、_ResetPassword.php_という名前を付けましょう:

_<?php

namespace App\Notifications;

use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;

class ResetPassword extends Notification
{
    public $token;

    public function __construct($token)
    {
        $this->token = $token;
    }

    public function via($notifiable)
    {
        return ['mail'];
    }

    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->subject('Your Reset Password Subject Here')
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', url('password/reset', $this->token))
            ->line('If you did not request a password reset, no further action is required.');
    }
}
_

Artisanコマンドを使用して通知テンプレートを生成することもできます。

_php artisan make:notification ResetPassword
_

または、上記のコードを単純にコピーして貼り付けることができます。お気づきかもしれませんが、この通知クラスはデフォルトの _Illuminate\Auth\Notifications\ResetPassword_ とかなり似ています。実際には、デフォルトのResetPasswordクラスから拡張するだけです。

唯一の違いはここにあり、新しいメソッド呼び出しを追加してメールの件名を定義します:

_return (new MailMessage)
        ->subject('Your Reset Password Subject Here')
_

Mail Notifications here について詳しく読むことができます。

次に、_app\User.php_ファイルで、 _Illuminate\Auth\Passwords\CanResetPassword_ traitで定義されたデフォルトのsendPasswordResetNotification()メソッドをオーバーライドする必要があります。ここで、独自のResetPassword実装を使用する必要があります。

_<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Notifications\ResetPassword as ResetPasswordNotification;

class User extends Authenticatable
{
    use Notifiable;

    ...

    public function sendPasswordResetNotification($token)
    {
        // Your your own implementation.
        $this->notify(new ResetPasswordNotification($token));
    }
}
_

これで、パスワード再設定メールの件名が更新されます!

Reset password email subject updated

この助けを願っています!

58

パスワードリセットリンクをユーザーに送信するために使用される通知クラスを簡単に変更できます。開始するには、UserモデルのsendPasswordResetNotificationメソッドをオーバーライドします。このメソッド内で、選択した通知クラスを使用して通知を送信できます。パスワードのリセット$tokenは、メソッドが受け取る最初の引数です。 カスタマイズのドキュメント を参照してください

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

お役に立てれば!

5
Saumya Rastogi

Laravel 5.7では、デフォルトの実装は次のようになります。

return (new MailMessage)
            ->subject(Lang::getFromJson('Reset Password Notification'))
            ->line(Lang::getFromJson('You are receiving this email because we received a password reset request for your account.'))
            ->action(Lang::getFromJson('Reset Password'), url(config('app.url').route('password.reset', $this->token, false)))
            ->line(Lang::getFromJson('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.users.expire')]))
            ->line(Lang::getFromJson('If you did not request a password reset, no further action is required.'));

localeconfig/app.phpからroに変更し、resources/langでこれに似たro.jsonファイルを作成するだけです。 :

{
  "Reset Password Notification": "Viața Medicală CMS :: Resetare parolă",
  "Hello!": "Salut,",
  "You are receiving this email because we received a password reset request for your account.": "Primești acest email deoarece am primit o solicitare de resetare a parolei pentru contul tău.",
  "Reset Password": "Reseteză parola",
  "This password reset link will expire in :count minutes.": "Acest link va expira în :count de minute.",
  "If you did not request a password reset, no further action is required.": "Dacă nu ai solicitat resetarea parolei, nu este necesară nicio altă acțiune.",
  "Regards": "Toate cele bune",
  "Oh no": "O, nu",
  "Whoops!": "Hopa!",
  "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser: [:actionURL](:actionURL)": "Dacă nu reușești să dai click pe butonul de \":actionText\", dă copy-paste la URL-ul de mai jos în browser:\n [:actionURL](:actionURL)"
}

件名(最初のキー)とメール本文の両方を翻訳します。

Laravel 6。*の更新
これはVerifyEmail.php通知にも使用できます。

2
Valdrinit

このようなパスワードのリセットトークンを作成するカスタム関数を作成できます。

 $user = User::where('email', '[email protected]' )->first();
 $password_broker = app(PasswordBroker::class); //so we can have dependency injection
 $token = $password_broker->createToken($user); //create reset password token
 $password_broker->emailResetLink($user, $token, function (Message $message) {
         $message->subject('Custom Email title');
 });//send email.
1
jycr753