📝 create documentation for user provision and authentication
This commit is contained in:
@ -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);
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user