@@ -104,11 +104,49 @@ public function store(LoginRequest $request): \Illuminate\Http\JsonResponse
104104 public function destroy (Request $ request ): \Illuminate \Http \JsonResponse
105105 {
106106 if ( ! Auth::check ()) {
107- return ResponseHelper::error ('Unauthorized ' , 401 );
107+ return ResponseHelper::error ('Unauthenticated ' , 401 );
108108 }
109109
110110 $ request ->user ()->tokens ()->delete ();
111111
112112 return ResponseHelper::success (message: 'logged out successfully ' , status: 204 );
113113 }
114+
115+ /**
116+ * @OA\Post(
117+ * path="/auth/refresh-token",
118+ * summary="Refresh the authentication token",
119+ * description="Revokes the existing token and generates a new token for the authenticated user.",
120+ * tags={"Authentication"},
121+ * @OA\Response(
122+ * response=200,
123+ * description="Token refreshed successfully",
124+ * @OA\JsonContent(
125+ * @OA\Property(property="status", type="boolean", example="success"),
126+ * @OA\Property(property="message", type="string", example="Token refreshed"),
127+ * @OA\Property(property="meta", type="object",
128+ * @OA\Property(property="accessToken", type="string", example="1|abc123..."),
129+ * @OA\Property(property="expires_in", type="integer", example=60)
130+ * )
131+ * )
132+ * ),
133+ * @OA\Response(response=401, ref="#/components/responses/401"),
134+ * )
135+ */
136+ public function refreshToken (Request $ request ): \Illuminate \Http \JsonResponse
137+ {
138+ $ user = auth ()->user ();
139+ $ user ->tokens ()->delete (); // Revoke all existing tokens
140+
141+ $ device = Str::limit ($ request ->userAgent (), 255 );
142+ $ token = $ user ->createToken ($ device )->plainTextToken ;
143+
144+ return ResponseHelper::success (
145+ message: 'Token refreshed ' ,
146+ meta: [
147+ 'accessToken ' => $ token ,
148+ 'expires_in ' => config ('sanctum.expiration ' ),
149+ ],
150+ );
151+ }
114152}
0 commit comments