Untitled
unknown
javascript
3 years ago
2.6 kB
7
Indexable
I built a nextjs app, it is an image generation platform with AI, I want to limit signed in users to only send one image generation request at a time, so I don't want them to open the dashboard from multiple tabs and send simultaneous requests, how can I implement that?
To prevent users from sending multiple image generation requests simultaneously, you can implement a combination of client-side and server-side checks. Here's a suggested approach:
Client-side: Use localStorage or sessionStorage to store a flag indicating whether a request is in progress.
Server-side: Implement a rate-limiting middleware to limit requests per user.
Step 1: Client-side flag
In your Next.js app, you can use localStorage or sessionStorage to store a flag when a user initiates an image generation request. This flag will help you determine if there's already a request in progress.
javascript
Copy code
// When the user submits a request
function handleRequestSubmission() {
// Check if there's already a request in progress
if (localStorage.getItem('requestInProgress') === 'true') {
alert('You already have an image generation request in progress. Please wait until it completes.');
return;
}
// Set the flag and send the request
localStorage.setItem('requestInProgress', 'true');
sendImageGenerationRequest();
}
// When the request is completed
function onRequestCompleted() {
localStorage.removeItem('requestInProgress');
}
Step 2: Server-side rate limiting
To ensure users can't bypass the client-side restrictions by sending requests directly to the API, you should implement rate limiting on the server-side. You can use a package like express-rate-limit to limit requests per user.
Install the package: npm install express-rate-limit
Set up rate limiting in your API:
javascript
Copy code
const rateLimit = require('express-rate-limit');
// Create a rate limiter with custom options
const imageGenerationLimiter = rateLimit({
windowMs: 60 * 1000, // 1 minute window
max: 1, // Limit each user to 1 request per windowMs
message: 'You can only send one image generation request at a time. Please wait.',
});
// Apply the rate limiter to your API route
app.post('/api/generate-image', imageGenerationLimiter, async (req, res) => {
// Your image generation logic here
});
This approach combines both client-side and server-side checks to ensure that users can only send one image generation request at a time. Remember to adjust the rate limiting settings according to your desired limits and infrastructure capacity.Editor is loading...