Example #1
0
 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', '無法取得更換密碼的連結。');
 }