Changeset 298f9b3 for src/lib/auth.ts


Ignore:
Timestamp:
01/21/26 18:03:04 (8 months ago)
Author:
Stefan-Saveski <stefansaveski19@…>
Branches:
master
Children:
50f2fb4
Parents:
997d094
Message:

feat: Implement professor portal with student management, grade handling, and profile display

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/lib/auth.ts

    r997d094 r298f9b3  
    22  accessToken: string;
    33  refreshToken: string;
     4};
     5
     6export type UserRole = 'Professor' | 'Student' | string;
     7
     8export type AuthSession = AuthTokens & {
     9  role: UserRole;
    410};
    511
     
    1218  access: 'iknow.auth.access',
    1319  refresh: 'iknow.auth.refresh',
     20  role: 'iknow.auth.role',
    1421} as const;
    1522
     
    5966}
    6067
     68export function setUserRole(role: UserRole) {
     69  // Keep role TTL aligned with access token TTL.
     70  writeStoredToken(STORAGE_KEYS.role, role, ACCESS_TOKEN_TTL_MS);
     71}
     72
    6173export function getAccessToken(): string | null {
    6274  return readStoredToken(STORAGE_KEYS.access)?.value ?? null;
     
    6779}
    6880
     81export function getUserRole(): UserRole | null {
     82  return readStoredToken(STORAGE_KEYS.role)?.value ?? null;
     83}
     84
    6985export function clearAuthTokens() {
    7086  if (!isBrowser()) return;
    7187  window.localStorage.removeItem(STORAGE_KEYS.access);
    7288  window.localStorage.removeItem(STORAGE_KEYS.refresh);
     89  window.localStorage.removeItem(STORAGE_KEYS.role);
    7390}
    7491
    75 export async function login(params: { email: string; password: string }) {
     92export async function login(params: { email: string; password: string }): Promise<AuthSession> {
    7693  const baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL ?? 'https://iknow-api.onrender.com';
    7794
     
    100117
    101118  const data = (await response.json()) as {
    102     token?: { accessToken?: string; refreshToken?: string };
     119    token?: string;
     120    refreshToken?: string;
     121    role?: string;
    103122  };
    104123
    105   const accessToken = data?.token?.accessToken;
    106   const refreshToken = data?.token?.refreshToken;
     124  const accessToken = data?.token;
     125  const refreshToken = data?.refreshToken;
     126  const role = data?.role;
    107127
    108128  if (!accessToken || !refreshToken) {
     
    110130  }
    111131
    112   const tokens: AuthTokens = { accessToken, refreshToken };
    113   setAuthTokens(tokens);
    114   return tokens;
     132  const session: AuthSession = {
     133    accessToken,
     134    refreshToken,
     135    role: role ?? 'Student',
     136  };
     137
     138  setAuthTokens(session);
     139  setUserRole(session.role);
     140  return session;
    115141}
Note: See TracChangeset for help on using the changeset viewer.