u
This commit is contained in:
52
src/api/auth.js
Normal file
52
src/api/auth.js
Normal file
@@ -0,0 +1,52 @@
|
||||
import { http, logApi } from './http.js';
|
||||
|
||||
export const auth = {
|
||||
async me() {
|
||||
try {
|
||||
const data = await http('/api/auth/me');
|
||||
return {
|
||||
user: data.user ?? null,
|
||||
googleClientId: data.googleClientId ?? null,
|
||||
};
|
||||
} catch (err) {
|
||||
if (err.status === 401 || err.status === 403) {
|
||||
return {
|
||||
user: null,
|
||||
googleClientId: err.data?.googleClientId ?? null,
|
||||
forbidden: err.status === 403,
|
||||
message: err.message,
|
||||
};
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
},
|
||||
|
||||
async loginWithGoogle(idToken) {
|
||||
logApi('loginWithGoogle', {
|
||||
idTokenLength: idToken?.length ?? 0,
|
||||
idTokenPrefix: idToken ? `${idToken.slice(0, 12)}…` : null,
|
||||
});
|
||||
const data = await http('/api/auth/login', {
|
||||
method: 'POST',
|
||||
body: { idToken },
|
||||
});
|
||||
// Confirm whether the session cookie actually works (not just login JSON).
|
||||
const session = await auth.me();
|
||||
logApi('session-after-login', {
|
||||
loginUser: data.user?.email ?? data.user?.sub ?? data.user ?? null,
|
||||
meUser: session.user?.email ?? session.user?.sub ?? session.user ?? null,
|
||||
meForbidden: session.forbidden ?? false,
|
||||
meMessage: session.message ?? null,
|
||||
sessionOk: Boolean(session.user),
|
||||
});
|
||||
return { user: data.user, session };
|
||||
},
|
||||
|
||||
async logout() {
|
||||
try {
|
||||
await http('/api/auth/logout', { method: 'POST' });
|
||||
} catch (err) {
|
||||
if (err.status !== 401) throw err;
|
||||
}
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user