diff --git a/app/Http/Controllers/Admin/MemberController.php b/app/Http/Controllers/Admin/MemberController.php index 006d349..d264dbf 100644 --- a/app/Http/Controllers/Admin/MemberController.php +++ b/app/Http/Controllers/Admin/MemberController.php @@ -11,7 +11,6 @@ class MemberController extends Controller public function index() { $data = Member::paginate(20); - return view('admin.member.index', ['data' => $data]); } } diff --git a/app/Http/Controllers/front/RegisterController.php b/app/Http/Controllers/front/RegisterController.php index 0d1aca9..a9e8e09 100644 --- a/app/Http/Controllers/front/RegisterController.php +++ b/app/Http/Controllers/front/RegisterController.php @@ -4,6 +4,9 @@ use App\Http\Controllers\Controller; use App\Models\Member; use Illuminate\Http\Request; +use Exception; +use App\Models\EmailVerifications; +use Mail; class RegisterController extends Controller { @@ -41,6 +44,111 @@ public function create(Request $request) } + + + public function forgotPassword(Request $request) + { + + return view('front.auth.forgot-password'); + } + + public function sendForgotPassword(Request $request) + { + \Log::info('sendForgotPassword', []); + $subject = "卡菲姬系統-密碼重新設定"; + $token = \Str::random(32); + $result = Member::where('email', $request->email)->first(); + + try { + if (!isset($result)) { + throw new Exception("找不到帳號", 404); + } else { + $verificationLink = route('reset.password.token', ['token' => $token, 'id' => $result->id]); + + \Log::info('sendForgotPassword go EmailVerifications', []); + $res = EmailVerifications::where('email', $request->email)->first(); + if ($res) { + + $res->email = $request->email; + $res->token = $token; + $res->save(); + + } else { + EmailVerifications::create([ + 'email' => $request->email, + 'token' => $token, + ]); + + } + + + } + // 郵件內容 + $message = "您好,\n\n請點擊以下鏈更換您的電子郵件地址:\n\n" . $verificationLink . "\n\n如果您未請求此操作,請忽略此郵件。\n\n感謝您!"; + // 發送電子郵件 + Mail::to($request->input('email'))->send(new \App\Mail\CustomMail($subject, $message)); + return response()->json(['status' => 'success', 'msg' => '郵件發送成功']); + } catch (\Exception $e) { + \Log::error('Failed to send mail', ['error' => $e->getMessage()]); + return response()->json(['status' => 'error', 'msg' => '郵件發送失敗,請稍後再試!', 'error' => $e->getMessage()], 500); + } + } + + public function resetPassword(Request $request) + { + $valid = true; + $request->validate([ + 'token' => 'required', + ]); + + $emailVerification = EmailVerifications::where('token', $request->token)->first(); + + if (!$emailVerification) { + $valid = false; + } + + $member = Member::where('email', $emailVerification->email)->firstOrFail(); + + if (!$member) { + $valid = false; + } + + // 刪除使用過的令牌 + $emailVerification->delete(); + + if ($valid == true) { + + return redirect()->route('change.password', ['id', $member->id]); + + + } else { + + return redirect()->route('front.login.view')->with('error', '驗證密碼token 失敗'); + } + + + } + + public function changePassword(Request $request) + { + + return view('front.auth.confirmpassword'); + } + + public function confrimPassword(Request $request) + { + + + return view('front.auth.confirmpassword'); + + } + + public function resetPasswordProcess($id, Request $request) + { + + + } + /** * Store a newly created resource in storage. */ diff --git a/app/Models/Member.php b/app/Models/Member.php index 127edad..7f1281c 100644 --- a/app/Models/Member.php +++ b/app/Models/Member.php @@ -2,9 +2,11 @@ namespace App\Models; +use App; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; +use App\Models\Promocode; class Member extends Authenticatable { @@ -58,4 +60,11 @@ public function getLevelNameAttribute() protected $casts = [ 'email_verified_at' => 'datetime', ]; + + + public function getPromoCode() + { + return $this->hasOne(Promocode::class, 'used_count', 'id'); + } + } diff --git a/resources/views/admin/member/index.blade.php b/resources/views/admin/member/index.blade.php index e020cbb..b228a29 100644 --- a/resources/views/admin/member/index.blade.php +++ b/resources/views/admin/member/index.blade.php @@ -2,193 +2,191 @@ @section('header') @endsection @section('content') -
-
-
- - -
-
- - -
- - - -
- - - -
-
-
-
-
-
-

會員共計

-
-

21,459

-

(+29%)

-
- Total Users -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

普通會員

-
-

4,567

-

(+18%)

-
- Last week analytics -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

白銀會員

-
-

19,860

-

(-14%)

-
- Last week analytics -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

白金會員

-
-

237

-

(+42%)

-
- Last week analytics -
-
-
-
-
-
-
-
-
-
+
+
+
+ +
- -
-
-
Filters
-
-
-
-
-
-
-
- - - - - - - - - - - - - @foreach($data as $item) - - - - - - - - - - @endforeach - -
會員id會員名稱手機號碼會員等級兌換碼操 作
{{$item->id}} -
-
-
- Avatar -
-
-
- - {{$item->name}} - {{$item->email}} -
-
-
{{$item->phone}} - - - @if($item->level == 0) - - @elseif($item->level == 1) - - @elseif($item->level == 2) - - - @endif - - {{$item->Level_Name}} - - - - 未實作
-
-
-
- {{$data->links()}}
+ +
+ + + +
+ + + +
+
+
+
+
+
+

會員共計

+
+

21,459

+

(+29%)

+
+ Total Users +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

普通會員

+
+

4,567

+

(+18%)

+
+ Last week analytics +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

白銀會員

+
+

19,860

+

(-14%)

+
+ Last week analytics +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

白金會員

+
+

237

+

(+42%)

+
+ Last week analytics +
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
Filters
+
+
+
+
+
+
+
+ + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + @endforeach + +
會員id會員名稱手機號碼會員等級兌換碼操 作
{{ $item->id }} +
+
+
+ Avatar +
+
+
+ + {{ $item->name }} + {{ $item->email }} +
+
+
{{ $item->phone }} + + @if ($item->level == 0) + + @elseif($item->level == 1) + + @elseif($item->level == 2) + + @endif + + {{ $item->Level_Name }} + + {{ $item->getPromoCode->code }} +
+
+
+
+ {{ $data->links() }} +
+ +
+ +
- -
-
@endsection @section('scripts') @endsection diff --git a/resources/views/front/auth/confirmpassword.blade.php b/resources/views/front/auth/confirmpassword.blade.php new file mode 100644 index 0000000..49d3781 --- /dev/null +++ b/resources/views/front/auth/confirmpassword.blade.php @@ -0,0 +1,173 @@ + + + + + + + + Reset Password Basic - Pages | Materialize - Material Design HTML Admin Template + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + +
+

重新設定密碼 🔒

+

請設定新密碼

+
+ @csrf + @method('PUT') +
+
+
+ + +
+ +
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+ + mask +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/views/front/auth/forgot-password.blade.php b/resources/views/front/auth/forgot-password.blade.php new file mode 100644 index 0000000..d3fda6b --- /dev/null +++ b/resources/views/front/auth/forgot-password.blade.php @@ -0,0 +1,227 @@ + + + + + + + + + + + + 忘記密碼 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + +
+

忘記密碼? 🔒

+

輸入您的電子郵件地址,我們將向您發送重設密碼的說明

+
+ @csrf +
+ + +
+ +
+ +
+
+ + mask +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/views/front/login.blade.php b/resources/views/front/login.blade.php index b75fdf1..0840777 100644 --- a/resources/views/front/login.blade.php +++ b/resources/views/front/login.blade.php @@ -8,7 +8,7 @@ 卡菲姬登入 - + @@ -72,7 +72,7 @@ // Core stylesheets 'core.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/core-kL5gEEKA.css', 'core-dark.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/core-dark-DFvmi5J3.css', - + // Themes 'theme-default.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/theme-default-Bt2z4DrM.css', 'theme-default-dark.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/theme-default-dark-CHvAJUy2.css', @@ -93,7 +93,7 @@ - +
@@ -105,13 +105,13 @@ @@ -145,7 +145,7 @@ 記住 我
- + 忘記密碼?
@@ -166,13 +166,13 @@
- + - - + + {{-- @@ -188,11 +188,11 @@ - + {{--
Buy Now
--}} - + diff --git a/resources/views/front/member/auth-register.blade.php b/resources/views/front/member/auth-register.blade.php index c8873f7..c825581 100644 --- a/resources/views/front/member/auth-register.blade.php +++ b/resources/views/front/member/auth-register.blade.php @@ -2,7 +2,7 @@ - + @@ -12,7 +12,7 @@ - + diff --git a/resources/views/layouts/navbar.blade.php b/resources/views/layouts/navbar.blade.php index 48208b0..a1a3eaa 100644 --- a/resources/views/layouts/navbar.blade.php +++ b/resources/views/layouts/navbar.blade.php @@ -125,7 +125,7 @@ {{-- --}} {{-- --}}
  • - + 交易紀錄 diff --git a/routes/web.php b/routes/web.php index f64e4fb..45d98d9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -35,11 +35,18 @@ Route::get('login/line/callback', [LoginController::class, 'handleProviderCallback'])->name('front.login.line.callback'); Route::get('register', [RegisterController::class, 'index'])->name('member.register'); Route::post('register/create', [RegisterController::class, 'create'])->name('member.register.create'); -//前台route 登入後; Route::get('email/verify', [EmailController::class, 'index'])->name('email.verify'); +Route::get('email/password', [RegisterController::class, 'forgotPassword'])->name('email.password'); +Route::post('email/password', [RegisterController::class, 'sendForgotPassword'])->name('email.password.post'); +Route::get('resetpassword', [RegisterController::class, 'resetPassword'])->name('reset.password.token'); +Route::get('changepassword/{id}', [RegisterController::class, 'changePassword'])->name('change.password'); +Route::put('changepassword/{id}', [RegisterController::class, 'resetPasswordProcess'])->name('change.password.put'); + Route::any('checkphone', [MemberController::class, 'checkPhone'])->name('member.checkphone'); + +//前台route 登入後; Route::prefix('member') ->middleware(memberAuth::class) // 使用自定义守卫的中间件 ->as('member.')