1
0
Fork 0

rewrote database and auth logic

- removed information from firebase db
- added `updateUser` function
This commit is contained in:
Kim, Jimin 2022-02-26 17:27:16 +09:00
parent 31445b7f0f
commit b84fa29d9f
2 changed files with 61 additions and 52 deletions

View file

@ -11,37 +11,55 @@ interface UserResult extends DatabaseResult {
}
export default {
findUser: async (uid: string): Promise<UserResult> => {
let result
async findUser(uid: string): Promise<UserResult> {
try {
const user = await admin.firestore().collection("users").doc(uid).get()
const user = await admin
.firestore()
.collection("users")
.doc(uid)
.get()
result = user.exists
? { success: true, user: user.data() }
: { success: false, error: `user with uid ${uid} does not exist` }
} catch (error) {
logger.error("Error finding user", error)
result = { success: false, error: error.message }
}
return result
},
newUser: async (profile: Express.User): Promise<UserResult> => {
let result
try {
const newUserData = {
avatar: profile.avatar,
discriminator: profile.discriminator,
email: profile.email,
id: profile.id,
username: profile.username,
if (user.exists) {
return {
success: true,
user: user.data(),
}
} else {
return {
success: false,
error: `user with uid ${uid} does not exist`,
}
}
await firestore().doc(`/users/${profile.id}`).set(newUserData)
result = { success: true, user: newUserData }
} catch (error) {
return { success: false, error: error.message }
}
},
async newUser(profile: Express.User): Promise<UserResult> {
try {
await firestore().doc(`/users/${profile.id}`).set({
id: profile.id,
avatar: profile.avatar,
username: profile.username,
discriminator: profile.discriminator,
})
return { success: true, user: profile }
} catch (error) {
logger.error("Error creating user", error)
result = { success: false, error: error.message }
return { success: false, error: error.message }
}
return result
},
async updateUser(profile: Express.User): Promise<UserResult> {
await firestore().doc(`/users/${profile.id}`).update({
id: profile.id,
avatar: profile.avatar,
username: profile.username,
discriminator: profile.discriminator,
})
return { success: true, user: profile }
},
}

View file

@ -9,30 +9,23 @@ import secret from "../secret.json"
import config from "../config.json"
passport.serializeUser((user, done) => {
// `user.id` will be used in `passport.deserializeUser`
done(null, user.id)
})
passport.deserializeUser(async (id: string, done) => {
try {
const user = await database.findUser(id)
if (user.success === true) {
if (user.success) {
done(null, user.user as Express.User)
} else {
done(null)
done(new Error("Failed to get user from database"))
}
} catch (error) {
logger.error("Error deserializing user", error.message)
done(error)
}
database
.findUser(id)
.then((user) => {
done(null, user.user as Express.User)
})
.catch((error) => {
logger.error("Error deserializing user", error.message)
})
})
passport.use(
@ -48,24 +41,22 @@ passport.use(
"/auth",
scope: config.scopes,
},
async (accessToken, refreshToken, profile, done) => {
try {
const searchUserResult = await database.findUser(profile.id)
// check if user already exists
if (searchUserResult.success && searchUserResult.user) {
return done(null, searchUserResult.user as Express.User)
} else {
const newUser: Express.User = {
...profile,
token: accessToken,
refreshToken: refreshToken,
}
await database.newUser(newUser)
return done(null, newUser)
async (_accessToken, _refreshToken, profile, done) => {
try {
const user = await database.findUser(profile.id)
if (!user.success) {
database.newUser(profile as Express.User)
}
if (user.user) {
await database.updateUser(profile as Express.User)
}
done(null, profile as Express.User)
} catch (error) {
return logger.error("Error creating a user", error)
logger.error("Error creating a user", error)
}
}
)