diff --git a/src/accounts/logUserIn.js b/src/accounts/logUserIn.js
index e8f2dcd..a96ce25 100644
--- a/src/accounts/logUserIn.js
+++ b/src/accounts/logUserIn.js
@@ -1,5 +1,5 @@
import { createSession } from './session.js'
-import { createTokens } from './tokens.js'
+import { refreshTokens } from './user.js'
export async function logUserIn(userId, request, reply) {
const connectionInformation = {
@@ -8,20 +8,8 @@ export async function logUserIn(userId, request, reply) {
}
// Create Session
const sessionToken = await createSession(userId, connectionInformation)
+
// Create JWT
- const { accessToken, refreshToken } = await createTokens(sessionToken, userId)
// Set Cookie
- const now = new Date()
- // Get date, 30 days in the future
- const refreshExpires = now.setDate(now.getDate() + 30)
- reply.setCookie('refreshToken', refreshToken, {
- path: "/",
- domain: "localhost",
- httpOnly: true,
- expires: refreshExpires,
- }).setCookie('accessToken', accessToken, {
- path: "/",
- domain: "localhost",
- httpOnly: true,
- })
+ await refreshTokens(sessionToken, userId, reply)
}
\ No newline at end of file
diff --git a/src/accounts/logUserOut.js b/src/accounts/logUserOut.js
new file mode 100644
index 0000000..3f3a865
--- /dev/null
+++ b/src/accounts/logUserOut.js
@@ -0,0 +1,21 @@
+import jwt from 'jsonwebtoken'
+
+const JWTSignature = process.env.JWT_SIGNATURE
+
+export async function logUserOut(request, reply) {
+ try {
+ const { session } = await import("../session/session.js")
+
+ if (request?.cookies?.refreshToken) {
+ const { refreshToken } = request.cookies
+ // Decode refresh token
+ const { sessionToken } = jwt.verify(refreshToken, JWTSignature)
+ // Delete database record for session
+ await session.deleteOne({ sessionToken })
+ }
+ // Remove cookies
+ reply.clearCookie('refreshToken').clearCookie('accessToken')
+ } catch (e) {
+ console.error(e);
+ }
+}
\ No newline at end of file
diff --git a/src/accounts/user.js b/src/accounts/user.js
index cffe381..f50c20e 100644
--- a/src/accounts/user.js
+++ b/src/accounts/user.js
@@ -34,7 +34,6 @@ export async function getUserFromCookies(request, reply) {
const currentUser = await user.findOne({
_id: ObjectId(currentSession.userId)
})
- console.log('currentUser', currentUser);
// Refresh tokens
await refreshTokens(sessionToken, currentUser._id, reply)
// Retrun current user
diff --git a/src/index.js b/src/index.js
index b811861..3b666eb 100644
--- a/src/index.js
+++ b/src/index.js
@@ -8,6 +8,7 @@ import { connectDb } from './db.js'
import { registerUser } from './accounts/register.js'
import { authorizeUser } from './accounts/authorize.js'
import { logUserIn } from './accounts/logUserIn.js'
+import { logUserOut } from './accounts/logUserOut.js'
import { getUserFromCookies } from './accounts/user.js'
// ESM specific "features"
@@ -32,11 +33,44 @@ async function startApp() {
request.body.email,
request.body.password
)
+ if (userId) {
+ await logUserIn(userId, request, reply)
+ reply.send({
+ data: {
+ status: "SUCCESS",
+ userId,
+ },
+ })
+ }
} catch (e) {
console.error('e', e);
+ reply.send({
+ data: {
+ status: "FAILED",
+ userId,
+ },
+ })
}
})
+ app.post('/api/logout', {}, async (request, reply) => {
+ try {
+ await logUserOut(request, reply)
+ reply.send({
+ data: {
+ status: "SUCCESS",
+ },
+ })
+ } catch (e) {
+ console.error('e', e);
+ reply.send({
+ data: {
+ status: "FAILED",
+ userId,
+ },
+ })
+ }
+ })
app.post('/api/authorize', {}, async (request, reply) => {
try {
@@ -48,14 +82,20 @@ async function startApp() {
if (isAuthorized) {
await logUserIn(userId, request, reply)
reply.send({
- data: "User Logged In",
+ data: {
+ status: "SUCCESS",
+ userId,
+ },
})
}
- reply.send({
- data: "Auth Failed",
- })
} catch (e) {
console.error('e', e);
+ reply.send({
+ data: {
+ status: "FAILED",
+ userId,
+ },
+ })
}
})
diff --git a/src/public/index.html b/src/public/index.html
index 8babe20..0614f74 100644
--- a/src/public/index.html
+++ b/src/public/index.html
@@ -24,7 +24,23 @@
+
+