forked from cerc-io/snowballtools-base
## What changed? This Pull Request introduces an access code validation feature to the authentication process. Changes encompass backend route for access code validation, new frontend components for handling access code input, and integration of the access code verification in the signup flow. ### Backend: - Added POST `/accesscode` route in `auth.ts` for validating access codes. ### Frontend: - Created `AccessCode` component for access code input and validation. - Added `AccessSignUp` component that integrates access code verification before signup. - Updated `SignUp` component to check for valid access code on mount. - Modified `SnowballAuth` to use new `AccessSignUp` instead of `SignUp`. - Added `verifyAccessCode` utility function for code verification API call. ## How to test? 1. Run the backend and frontend projects. 2. Navigate to the signup page. You should be prompted to enter an access code. 3. Enter the code `444444` and proceed. Any other code should display an error message. 4. Verify that valid access code routes to the signup component. ## Why make this change? This change improves authentication by adding an extra layer of security through access code verification.
29 lines
757 B
TypeScript
29 lines
757 B
TypeScript
import { baseUrl } from './constants';
|
|
|
|
export async function verifyAccessCode(
|
|
accesscode: string,
|
|
): Promise<boolean | null> {
|
|
const res = await fetch(`${baseUrl}/auth/accesscode`, {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
accesscode,
|
|
}),
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
credentials: 'include',
|
|
});
|
|
// If API returns a non-empty 200, this is a valid access code.
|
|
if (res.status == 200) {
|
|
const isValid = (await res.json()).isValid as boolean;
|
|
console.log('isValid', isValid);
|
|
return isValid;
|
|
} else if (res.status === 204) {
|
|
return null;
|
|
} else {
|
|
throw new Error(
|
|
`Unexpected response from access code endpoint: ${res.status}: ${await res.text()}`,
|
|
);
|
|
}
|
|
}
|