diff --git a/.env.example b/.env.example
index 41cb9efb6286629090a4284d526ebf0009c7d9fd..71bcc64ace2f3063e53af4ba8724bf44f1a52872 100644
--- a/.env.example
+++ b/.env.example
@@ -1,3 +1,4 @@
 AUTH_SECRET_KEY=
 AUTH_ID=
-SESSION_SECRET=
\ No newline at end of file
+SESSION_SECRET=
+REDIRECT_URI={redirect after auth, not required, default = /}
\ No newline at end of file
diff --git a/src/middlewares/auth/complete.ts b/src/middlewares/auth/complete.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ac2036d50462fbdd7af9f1a49b62302347b944e4
--- /dev/null
+++ b/src/middlewares/auth/complete.ts
@@ -0,0 +1,60 @@
+import Profile, { Role } from "../../models/ProfileSchema";
+import { Request, Response } from "express";
+import { oauth2, scope } from "../../utils/auth";
+
+import { authschResponse } from "../../utils/types/authschResponse";
+import axios from "axios";
+
+const complete = () => async (req: Request, res: Response) => {
+  const tokenConfig = {
+    code: req.query.code,
+    scope: scope,
+    redirect_uri: "",
+  };
+
+  try {
+    const token = await oauth2().authorizationCode.getToken(tokenConfig);
+    await axios
+      .get<authschResponse>(
+        `https://auth.sch.bme.hu/api/profile/?access_token=${token.access_token}`
+      )
+      .then((response) => {
+        Profile.findOne(
+          { external_id: response.data.internal_id },
+          (error, profile) => {
+            if (error) {
+              console.warn(error);
+              return res.status(400);
+            } else {
+              if (!profile) {
+                const newProfile = new Profile();
+                newProfile.external_id = response.data.internal_id;
+                newProfile.email = response.data.mail;
+                newProfile.name = `${response.data.sn} ${response.data.givenName}`;
+                newProfile.save((err) => {
+                  if (err) {
+                    console.log(err);
+                    return res.status(400);
+                  }
+                });
+              }
+            }
+          }
+        );
+        req.session!.user = {
+          id: String(response.data.internal_id),
+          email: String(response.data.mail),
+          name: `${response.data.sn} ${response.data.givenName}`,
+          token,
+        };
+      })
+      .catch(function (error) {
+        console.log(error);
+      });
+    return res.redirect(process.env.REDIRECT_URI || "/");
+  } catch (error) {
+    console.log("Access Token Error", error.message);
+  }
+};
+
+export default complete;