json([ 'expires_in' => JWTAuth::setToken($token)->getPayload()->get('exp'), 'token' => $token, 'user' => auth('admins')->user(), 'status' => true ]); } public function login(Request $request) { $email = $request->get('email'); $password = $request->get('password'); $admin = Admin::where('email', $email)->first(); if ($admin && Hash::check($password, $admin->password)) { auth('admins')->login($admin); return $this->respondWithToken(); } return response()->json([ 'message' => 'Incorrect email or password.', 'status' => false ], 400); } public function register() { } public function forgotPassword(Request $request) { $this->validate($request, [ 'email' => 'required|email' ]); $admin = Admin::where('email', $request->get('email'))->first(); if ($admin) { $admin->update([ 'forgot_code' => Str::random() ]); Mail::send(new ForgotPasswordMail( name: $admin->name, email: $admin->email, forgot_code: $admin->forgot_code )); } return response()->json([ 'status' => true ]); } public function resetPassword(Request $request) { $this->validate($request, [ 'forgot_code' => 'required|exists:admin', 'new_password' => new PasswordRule, 'confirm_password' => 'same:new_password' ]); $admin = Admin::where('forgot_code', $request->get('forgot_code'))->first(); if ($admin) { $admin->update([ 'password' => bcrypt($request->get('new_password')), 'forgot_code' => null ]); Mail::send(new ResetPasswordMail( name: $admin->name, email: $admin->email, )); return response()->json([ 'status' => true ]); } return response()->json([ 'status' => false ]); } public function changePassword(Request $request) { $this->validate($request, [ 'password' => 'required', 'new_password' => new PasswordRule, 'confirm_password' => 'same:new_password' ]); $admin = auth('admins')->user(); if (!Hash::check($request->get('password'), $admin->password)) { // Fail check old password return response()->json([ 'errors' => [ 'password' => [ 'The old password is incorrect' ] ], ], 400); } $admin->update([ 'password' => bcrypt($request->get('new_password')), 'forgot_code' => null ]); Mail::send(new ResetPasswordMail( name: $admin->name, email: $admin->email, )); return response()->json([ 'status' => true ]); } public function detail() { return response()->json([ 'user' => auth('admins')->user(), 'status' => true ]); } public function logout() { $user = auth('admins')->user(); auth('admins')->logout(); return response()->json([ 'status' => true, 'user' => $user ]); } }