rewrote database and auth logic
- removed information from firebase db - added `updateUser` function
This commit is contained in:
parent
31445b7f0f
commit
b84fa29d9f
2 changed files with 61 additions and 52 deletions
|
@ -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 }
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue