public function postForgotPassword(Request $request) { $validator = Validator::make($request->all(), ['email' => 'required|email']); if ($validator->fails()) { return Redirect::route('user.forgot-password')->withErrors($validator)->withInput(); } else { $user = User::where('email', '=', $request->get('email')); if ($user->count()) { $user = $user->first(); $code = str_random(60); //檢查是否曾有驗證碼記錄 if (DB::table('password_resets')->where('email', '=', $user->email)->count()) { //更新找回密碼的驗證碼 DB::table('password_resets')->where('email', '=', $user->email)->update(['token' => $code, 'created_at' => Carbon::now()->toDateTimeString()]); } else { //產生找回密碼的驗證碼 DB::table('password_resets')->insert(['email' => $user->email, 'token' => $code, 'created_at' => Carbon::now()->toDateTimeString()]); } if ($user->save()) { try { //發送信件 Mail::send('emails.forgot', ['link' => URL::route('user.reset-password', $code)], function ($message) use($user) { $message->to($user->email)->subject("[" . Config::get('site.name') . "] 重新設定密碼"); }); } catch (Exception $e) { //Log LogHelper::info('[SendEmailFailed] 發送失敗:無法寄出密碼重設信件給' . $user->email, ['email' => $user->email, 'ip' => $request->getClientIp()]); return Redirect::route('user.forgot-password')->with('warning', '無法寄出密碼重設信件,請稍後再嘗試。'); } return Redirect::route('home')->with('global', '更換密碼的連結已發送至信箱。'); } } else { return Redirect::route('user.forgot-password')->with('warning', '此信箱仍未註冊成為會員。'); } } return Redirect::route('user.forgot-password')->with('warning', '無法取得更換密碼的連結。'); }