コントローラ内から特定のユーザー(現在ログインしているユーザーではない)に手動でパスワードリセット要求を送信したいと思います。私はLaravelコードを少し掘り下げましたが、ResetsPasswords
でpostEmail(Request $request)
を呼び出す必要があるようですが、理解できないようです。正しいPasswordController
インスタンスにアクセスしてそれを呼び出す方法。
なぜあなたのコントローラーにとってこのようなものではないのですか?
<?php
namespace Illuminate\Foundation\Auth;
use Illuminate\Http\Request;
use Illuminate\Mail\Message;
use Illuminate\Support\Facades\Password;
class YourController extends Controller
{
public function sendEmail()
{
$credentials = ['email' => $email_address];
$response = Password::sendResetLink($credentials, function (Message $message) {
$message->subject($this->getEmailSubject());
});
switch ($response) {
case Password::RESET_LINK_SENT:
return redirect()->back()->with('status', trans($response));
case Password::INVALID_USER:
return redirect()->back()->withErrors(['email' => trans($response)]);
}
}
}
これをどのように送信するかというコンテキストを実際には説明しないので、適宜調整してください。
Laravel 5.5の完全な制御:
$user = User::where('email', request()->input('email'))->first();
$token = Password::getRepository()->create($user);
Mail::send(['text' => 'emails.password'], ['token' => $token], function (Message $message) use ($user) {
$message->subject(config('app.name') . ' Password Reset Link');
$message->to($user->email);
});
Mariusz Kurmanのおかげで、私は彼の答えにトークンを追加しただけでした。これはうまくいきます:
$user = User::where('email', request()->input('email'))->first();
$token = Password::getRepository()->create($user);
$user->sendPasswordResetNotification($token);
最も簡単な方法:
$user = User::where('email', request()->input('email'))->first();
$user->sendPasswordResetNotification($token);
また、電子メールを手動で編集する場合:
php artisan vendor:publish
「11」を選択すると、次のようになります。
/resources/views/vendor/notifications/email.blade.php