📝 create documentation for user provision and authentication

This commit is contained in:
Rafi Arrafif
2025-08-13 11:13:19 +07:00
parent 1ebcc8d21d
commit c1adb767e7
2 changed files with 11 additions and 7 deletions

View File

@ -17,12 +17,6 @@ export const OAuthUserProvisionService = async (
providerRawCallback: unknown, providerRawCallback: unknown,
userHeaderInfo: UserHeaderInformation userHeaderInfo: UserHeaderInformation
) => { ) => {
/**
* Create auth session if user already exist,
* create user account and give them auth session if not
*
* This is just example!!
*/
try { try {
const providerId = `${payload.providerName}_${payload.openId}`; const providerId = `${payload.providerName}_${payload.openId}`;
const findUserResult = (await findUserService({ const findUserResult = (await findUserService({
@ -34,7 +28,12 @@ export const OAuthUserProvisionService = async (
if (findUserResult) { if (findUserResult) {
return await createUserSessionService(findUserResult.id, userHeaderInfo); return await createUserSessionService(findUserResult.id, userHeaderInfo);
} else { } else {
return "Not Found"; /**
* === TODO ===
* If the user is not found,
* create a new one with the data obtained from the OAuth provider,
* then create a user session and authenticate it immediately.
*/
} }
} catch (error) { } catch (error) {
ErrorForwarder(error); ErrorForwarder(error);

View File

@ -10,9 +10,11 @@ export const createUserSessionService = async (
userHeaderInfo: UserHeaderInformation userHeaderInfo: UserHeaderInformation
) => { ) => {
try { try {
// set the date when the token will expire
const generateTokenExpirationDate = const generateTokenExpirationDate =
Date.now() + Number(process.env.SESSION_EXPIRE) * 1000; Date.now() + Number(process.env.SESSION_EXPIRE) * 1000;
// construct all data to fit the user session input query
const constructData = { const constructData = {
userId, userId,
isAuthenticated: true, isAuthenticated: true,
@ -23,8 +25,10 @@ export const createUserSessionService = async (
validUntil: new Date(generateTokenExpirationDate), validUntil: new Date(generateTokenExpirationDate),
} as Prisma.UserSessionUncheckedCreateInput; } as Prisma.UserSessionUncheckedCreateInput;
// insert user session into database
const createUserSession = await createUserSessionRepository(constructData); const createUserSession = await createUserSessionRepository(constructData);
// caching user session data into Redis
const createRedisKey = `${process.env.APP_NAME}:users:${userId}:sessions:${createUserSession.id}`; const createRedisKey = `${process.env.APP_NAME}:users:${userId}:sessions:${createUserSession.id}`;
await redis.hset(createRedisKey, { await redis.hset(createRedisKey, {
userId, userId,
@ -33,6 +37,7 @@ export const createUserSessionService = async (
}); });
await redis.expire(createRedisKey, Number(process.env.SESSION_EXPIRE)); await redis.expire(createRedisKey, Number(process.env.SESSION_EXPIRE));
// create a jwt token with a payload containing the created user session, then return jwt
return jwtEncode(createUserSession); return jwtEncode(createUserSession);
} catch (error) { } catch (error) {
ErrorForwarder(error); ErrorForwarder(error);