only('email', 'password'))) { return response()->json([ 'message' => __('validation.invalid_credentials'), 'errors' => ['form_info' => __('validation.invalid_credentials')], ], 422); } $user = Auth::user(); $token = $user->createToken('token')->plainTextToken; return response([ 'auth' => 'user', 'user' => new AuthUserResource($user->load('locations')), ])->cookie('jwt', $token, 3 * 60 * 24); } public function logout(Request $request): Response { Cookie::queue(Cookie::forget('jwt')); Cookie::queue(Cookie::forget(config('session.cookie'))); $request->user()->tokens()->delete(); return response(['message' => 'logout']); } public function forgot(Request $request): JsonResponse { $data = $request->validate([ 'email' => 'required|email', ]); $user = User::whereEmail($data['email'])->first(); if (! $user) { return response()->json([ 'message' => 'Check your email', ]); } $token = Str::random(12); DB::table('password_reset_tokens')->insert([ 'email' => $user->email, 'token' => $token, 'created_at' => now(), ]); Mail::to($user->email)->queue(new Reset($token)); return response()->json([ 'message' => 'Check your email', ]); } public function register(Request $request) { $data = $request->validate([ 'name' => ['required', 'string', 'min:3'], 'email' => ['required', 'email', 'unique:users,email'], 'password' => ['required', 'min:8', 'regex:/^(?=.*?[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$/'], ], [ 'password.regex' => __('validation.password_rules'), ]); $user = User::create($data); $token = $user->createToken('token')->plainTextToken; return response([ 'auth' => 'user', 'user' => new AuthUserResource($user), ])->cookie('jwt', $token, 3 * 60 * 24); } public function reset(Request $request): JsonResponse { $data = $request->validate([ 'email' => 'exists:users,email', 'token' => 'exists:password_reset_tokens,token', 'password' => ['required', 'regex:/^(?=.*?[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$/'], 'confirm_password' => 'same:password', ], [ 'password.regex' => __('validation.password_rules'), 'confirm_password.same' => __('validation.password_confirm'), ]); $token = DB::table('password_reset_tokens') ->whereEmail($data['email']) ->whereToken($data['token']) ->orderBy('created_at', 'desc') ->first(); if ($token !== null && (new Carbon($token->created_at))->addDay() > now()) { $user = User::whereEmail($data['email'])->first(); $user->update(['password' => Hash::make($data['password'])]); $token->delete(); return response()->json(['message' => 'New password success']); } return response()->json([ 'message' => __('validation.invalid_credentials'), 'errors' => ['form_info' => __('validation.invalid_credentials')], ], 422); } public function user(Request $request): JsonResponse { $user = $request->user()->load('locations'); return response()->json(new AuthUserResource($user)); } }