diff --git a/src/api.ts b/src/api.ts
index d959eba..fa7cdeb 100644
--- a/src/api.ts
+++ b/src/api.ts
@@ -6,8 +6,8 @@ import {
 	getPoolsWithUser,
 	getUserByID,
 	groups,
-	users,
 	pools,
+	users,
 } from './data';
 
 export const router = Router();
@@ -18,6 +18,11 @@ router.get('/user', (req, res) => {
 	}
 
 	let userID = req.query.userID;
+	console.log(req.session, userID);
+	if (userID === '@me') {
+		userID = req.session.accountID;
+	}
+
 	let user = getUserByID(userID);
 
 	if (user) {
diff --git a/src/auth.ts b/src/auth.ts
index 831a662..82709d0 100644
--- a/src/auth.ts
+++ b/src/auth.ts
@@ -1,20 +1,11 @@
-import * as simpleoauth2 from 'simple-oauth2';
 import { v4 } from 'uuid';
 import { getAccountIDFromIonCode } from './auth_ion';
 
 const sessions: {
 	// Maps to user ID
-	[sessionID: string]: string;
+	[sessionID: string]: SessionData;
 } = {};
 
-export function getUserIDFromSessionToken(sessionToken: string): string | null {
-	if (sessionToken in sessions) {
-		return sessions[sessionToken];
-	} else {
-		return null;
-	}
-}
-
 export async function createSessionFromCodeAndProvider(
 	code: string,
 	provider: 'ion'
@@ -26,10 +17,19 @@ export async function createSessionFromCodeAndProvider(
 }
 
 // Returns the newly-created session ID
-export function createSession(userID: string): string {
+export function createSession(accountID: string): string {
 	const id = v4();
 
-	sessions[id] = userID;
+	sessions[id] = { accountID };
 
 	return id;
 }
+
+export function getSessionByToken(token: string): SessionData {
+	console.log(sessions);
+	if (token in sessions) {
+		return sessions[token];
+	} else {
+		return { accountID: null };
+	}
+}
diff --git a/src/getSessionID.ts b/src/getSessionID.ts
new file mode 100644
index 0000000..0c429e2
--- /dev/null
+++ b/src/getSessionID.ts
@@ -0,0 +1,10 @@
+import { IncomingMessage } from 'http';
+
+export default function getSessionID(request: IncomingMessage): string | null {
+	const auth = request.headers.authorization;
+	if (typeof auth === 'string' && auth.startsWith('Bearer ')) {
+		return auth.slice(7);
+	} else {
+		return null;
+	}
+}
diff --git a/src/index.ts b/src/index.ts
index 2dd3636..9a680ed 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -17,11 +17,13 @@ import bodyParser from 'body-parser';
 import cors from 'cors';
 import express from 'express';
 import * as api from './api';
+import { sessionMiddleware } from './sessionMiddleware';
 
 const app = express();
 
 app.use(cors());
 app.use(bodyParser.json());
+app.use(sessionMiddleware);
 
 app.use('/api', api.router);
 
diff --git a/src/sessionMiddleware.ts b/src/sessionMiddleware.ts
new file mode 100644
index 0000000..1ff6b21
--- /dev/null
+++ b/src/sessionMiddleware.ts
@@ -0,0 +1,15 @@
+import { RequestHandler } from 'express';
+import { getSessionByToken } from './auth';
+import getSessionID from './getSessionID';
+
+export const sessionMiddleware: RequestHandler = async (req, res, next) => {
+	const token = getSessionID(req);
+
+	if (token != null) {
+		req.session = getSessionByToken(token);
+	} else {
+		req.session = { accountID: null };
+	}
+
+	next();
+};
diff --git a/src/typings/session.d.ts b/src/typings/session.d.ts
new file mode 100644
index 0000000..644e35d
--- /dev/null
+++ b/src/typings/session.d.ts
@@ -0,0 +1,13 @@
+export {};
+
+declare global {
+	interface SessionData {
+		accountID: string;
+	}
+
+	namespace Express {
+		interface Request {
+			session: SessionData;
+		}
+	}
+}
diff --git a/tsconfig.json b/tsconfig.json
index b5da52a..2a9b7c6 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,8 +2,9 @@
 	"compilerOptions": {
 		"outDir": "dist/",
 		"esModuleInterop": true,
+		"moduleResolution": "Node"
 	},
-	"files": ["src/types.ts"],
-	"include": ["src/"],
-	"exclude": ["node_modules/"],
-}
\ No newline at end of file
+	"files": ["src/types.ts", "src/typings/session.d.ts"],
+	"include": ["src/", "session.d.ts"],
+	"exclude": ["node_modules/"]
+}