created basic auth system

This commit is contained in:
2023-04-23 17:16:53 +02:00
parent 70f18f75df
commit fa0a9b8e58
10 changed files with 360 additions and 15 deletions

View File

@@ -20,6 +20,24 @@ export default defineEventHandler(async (event) => {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
const userResult = await $fetch('https://discord.com/api/users/@me', {
headers: {
authorization: `Bearer ${tokenResponseData.access_token}`
}
})
const coll = db.collection('users')
const doc = {
discord: {
id: userResult.id,
username: userResult.username,
avatarHash: userResult.avatar || null
},
}
await coll.updateOne({ 'discord.id': userResult.id }, { $set: doc, $setOnInsert: { minecraft: { uuid: null, username: null }, team: null } }, { upsert: true })
const token = createToken(tokenResponseData.access_token, tokenResponseData.refresh_token, tokenResponseData.expires_in)

View File

@@ -0,0 +1,5 @@
export default defineEventHandler(async (event) => {
const auth = getAuth(event)
return auth
});

View File

@@ -7,3 +7,52 @@ export const createToken = (accessToken, refreshToken, maxAge) => {
expiresIn: maxAge,
})
}
export const getAuth = async (event) => {
const token = getCookie(event, 'jwt') || null
if (!token) {
throw createError({
statusCode: 401,
statusMessage: 'JWT token invalid',
})
}
const config = useRuntimeConfig()
let decodedToken;
try {
decodedToken = jwt.verify(token, config.jwtSecret)
} catch (err) {
console.log(err)
throw createError({
statusCode: 401,
statusMessage: 'JWT token invalid',
})
}
let userResult;
try {
userResult = await $fetch('https://discord.com/api/users/@me', {
headers: {
authorization: `Bearer ${decodedToken.accessToken}`
}
})
} catch (e) {
console.log(e)
}
try {
const coll = db.collection("users")
const user = await coll.findOne({ 'discord.id': userResult.id })
return user;
} catch (err) {
console.log(err)
throw createError({
statusCode: 500,
statusMessage: 'Error getting user'
})
}
}

View File

@@ -0,0 +1,6 @@
import { MongoClient } from "mongodb";
const uri = process.env.NUXT_DB_URL
const client = new MongoClient(uri);
export const db = client.db('polarcraft')