* Create web3 modal provider with SIWE * Add auth router to handle SIWE authentication * Use axios instance to make request * Add button for SIWE authentication * Add changes to access session in web-app GQL requests * Add auth check in GQL context and load/create user * Use authenticated user from context * Redirect to sign in page if unauthenticated and logout button * Change sign-in route to login * Get project domain from config file * Set user ethAddress column as unique * Use formatted user name * Get session secret and origin url from config file * Add unique constraint for eth address * Get secure and samesite from origin url * Get wallet connect id and backend url from env file * Format user email in member tab panel * Add backend config isProduction to set trust proxy * Use only one server url config * Add tool tip for displaying email * Add trustProxy and domain in server.session config * Add SERVER_GQL_PATH constant in frontend --------- Co-authored-by: neeraj <neeraj.rtly@gmail.com>
42 lines
962 B
TypeScript
42 lines
962 B
TypeScript
import { Router } from 'express';
|
|
import { SiweMessage, generateNonce } from 'siwe';
|
|
|
|
const router = Router();
|
|
|
|
router.get('/nonce', async (_, res) => {
|
|
res.send(generateNonce());
|
|
});
|
|
|
|
router.post('/validate', async (req, res) => {
|
|
const { message, signature } = req.body;
|
|
const { success, data } = await new SiweMessage(message).verify({
|
|
signature
|
|
});
|
|
|
|
if (success) {
|
|
req.session.address = data.address;
|
|
req.session.chainId = data.chainId;
|
|
}
|
|
|
|
res.send({ success });
|
|
});
|
|
|
|
router.get('/session', (req, res) => {
|
|
if (req.session.address && req.session.chainId) {
|
|
res.send({ address: req.session.address, chainId: req.session.chainId });
|
|
} else {
|
|
res.status(401).send({ error: 'Unauthorized: No active session' });
|
|
}
|
|
});
|
|
|
|
router.post('/logout', (req, res) => {
|
|
req.session.destroy((err) => {
|
|
if (err) {
|
|
return res.send({ success: false });
|
|
}
|
|
res.send({ success: true });
|
|
});
|
|
});
|
|
|
|
export default router;
|