Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers\Auth;
- use Illuminate\Support\Facades\DB;
- use App\Http\Controllers\Controller;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Date;
- use MongoDB\BSON\ObjectId;
- class SessionController extends Controller
- {
- /**
- * List all sessions for the authenticated user.
- */
- public function index(Request $request)
- {
- $userId = (string) Auth::id();
- $collection = DB::connection('mongodb')->getMongoClient()
- ->selectDatabase(config('database.connections.mongodb.database'))
- ->selectCollection('sessions');
- // Find sessions by user_id and sort by last_activity desc
- $cursor = $collection->find(
- ['user_id' => $userId],
- ['sort' => ['last_activity' => -1]]
- );
- $sessions = [];
- foreach ($cursor as $session) {
- $sessions[] = [
- 'id' => (string) $session->_id,
- 'ip_address' => $session->ip_address ?? null,
- 'user_agent' => $session->user_agent ?? null,
- 'last_activity' => isset($session->last_activity)
- ? Date::createFromTimestamp($session->last_activity)->toDateTimeString()
- : null,
- 'expires_at' => isset($session->expires_at)
- ? Date::parse($session->expires_at)->toDateTimeString()
- : null,
- ];
- }
- return response()->json($sessions);
- }
- /**
- * Revoke a session by ID.
- */
- public function destroy(Request $request, string $id)
- {
- $userId = (string) Auth::id();
- $collection = DB::connection('mongodb')->getMongoClient()
- ->selectDatabase(config('database.connections.mongodb.database'))
- ->selectCollection('sessions');
- // Convert string id to ObjectId
- //try {
- // $objectId = new ObjectId($id);
- //} catch (\Exception $e) {
- // return response()->json(['message' => 'Invalid session ID.'], 400);
- //}
- // Find session by _id
- //$session = $collection->findOne(['_id' => $objectId]);
- $session = $collection->findOne(['_id' => $id]);
- if (!$session || ($session->user_id ?? null) !== $userId) {
- return response()->json(['message' => 'Session not found or unauthorized.'], 404);
- }
- // Delete the session
- //$result = $collection->deleteOne(['_id' => $objectId]);
- $result = $collection->deleteOne(['_id' => $id]);
- if ($result->getDeletedCount() === 1) {
- return response()->json(['message' => 'Session revoked successfully.']);
- } else {
- return response()->json(['message' => 'Failed to revoke session.'], 500);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment