created basic auth system
This commit is contained in:
@@ -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)
|
||||
|
||||
|
5
web/server/api/auth/user/index.js
Normal file
5
web/server/api/auth/user/index.js
Normal file
@@ -0,0 +1,5 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const auth = getAuth(event)
|
||||
|
||||
return auth
|
||||
});
|
@@ -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'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
6
web/server/utils/mongodb.js
Normal file
6
web/server/utils/mongodb.js
Normal 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')
|
Reference in New Issue
Block a user