73 lines
2.7 KiB
PHP
73 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Auth;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Mail;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class ForgotPasswordController extends Controller
|
|
{
|
|
// パスワードリセット申請画面表示
|
|
public function showLinkRequestForm()
|
|
{
|
|
return view('auth.forgot-password');
|
|
}
|
|
|
|
// リセットメール送信
|
|
public function sendResetLinkEmail(Request $request)
|
|
{
|
|
$request->validate([
|
|
'email' => 'required|email',
|
|
'email_confirmation' => 'required|email|same:email',
|
|
], [
|
|
'email.required' => 'メールアドレスを入力してください。',
|
|
'email.email' => '正しいメールアドレス形式で入力してください。',
|
|
'email_confirmation.required' => '確認用メールアドレスを入力してください。',
|
|
'email_confirmation.email' => '正しいメールアドレス形式で入力してください。',
|
|
'email_confirmation.same' => 'メールアドレスが一致しません。',
|
|
]);
|
|
|
|
// ope_mailでユーザーを検索
|
|
$user = \App\Models\Ope::where('ope_mail', $request->input('email'))->first();
|
|
|
|
if (!$user) {
|
|
return back()->withErrors(['email' => '該当するユーザーが見つかりません。']);
|
|
}
|
|
|
|
// トークン生成
|
|
$token = Str::random(60);
|
|
|
|
// トークン保存(既存レコードがあれば更新)
|
|
DB::table('password_reset_tokens')->updateOrInsert(
|
|
['ope_mail' => $user->ope_mail],
|
|
[
|
|
'token' => $token,
|
|
'created_at' => now(),
|
|
]
|
|
);
|
|
|
|
// メール送信
|
|
try {
|
|
$resetUrl = url('/reset-password?token=' . $token . '&email=' . urlencode($user->ope_mail));
|
|
|
|
Mail::raw("下記URLからパスワード再設定を行ってください。\n\n{$resetUrl}", function ($message) use ($user) {
|
|
$message->to($user->ope_mail)
|
|
->from(config('mail.from.address'), config('mail.from.name'))
|
|
->subject('パスワード再設定のご案内');
|
|
});
|
|
} catch (\Throwable $e) {
|
|
Log::error('ForgotPassword mail send failed', [
|
|
'to' => $user->ope_mail,
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
return back()->withErrors(['email' => 'メール送信に失敗しました。サーバログを確認してください。']);
|
|
}
|
|
|
|
return back()->with('status', 'パスワード再設定メールを送信しました。');
|
|
}
|
|
}
|