
Security News
NVD Concedes Inability to Keep Pace with Surging CVE Disclosures in 2025
Security experts warn that recent classification changes obscure the true scope of the NVD backlog as CVE volume hits all-time highs.
loopback4-ratelimiter
Advanced tools
A simple loopback-next extension for rate limiting in loopback applications. This extension uses express-rate-limit under the hood with redis used as store for rate limiting key storage using rate-limit-redis
npm install loopback4-ratelimiter
In order to use this component into your LoopBack application, please follow below steps.
this.component(RateLimiterComponent);
this.bind(RateLimitSecurityBindings.CONFIG).to({
name: 'redis',
});
const rateLimitKeyGen = (req: Request) => {
const token =
(req.headers &&
req.headers.authorization &&
req.headers.authorization.replace(/bearer /i, '')) ||
'';
return token;
};
......
this.bind(RateLimitSecurityBindings.CONFIG).to({
name: 'redis',
max: 60,
keyGenerator: rateLimitKeyGen,
});
export class MySequence implements SequenceHandler {
constructor(
@inject(SequenceActions.FIND_ROUTE) protected findRoute: FindRoute,
@inject(SequenceActions.PARSE_PARAMS) protected parseParams: ParseParams,
@inject(SequenceActions.INVOKE_METHOD) protected invoke: InvokeMethod,
@inject(SequenceActions.SEND) public send: Send,
@inject(SequenceActions.REJECT) public reject: Reject,
@inject(RateLimitSecurityBindings.RATELIMIT_SECURITY_ACTION)
protected rateLimitAction: RateLimitAction,
) {}
async handle(context: RequestContext) {
const requestTime = Date.now();
try {
const {request, response} = context;
const route = this.findRoute(request);
const args = await this.parseParams(request, route);
// rate limit Action here
await this.rateLimitAction(request, response);
const result = await this.invoke(route, args);
this.send(response, result);
} catch (err) {
...
} finally {
...
}
}
}
const rateLimitKeyGen = (req: Request) => {
const token =
(req.headers &&
req.headers.authorization &&
req.headers.authorization.replace(/bearer /i, '')) ||
'';
return token;
};
.....
@ratelimit(true, {
max: 60,
keyGenerator: rateLimitKeyGen,
})
@patch(`/auth/change-password`, {
responses: {
[STATUS_CODE.OK]: {
description: 'If User password successfully changed.',
},
...ErrorCodes,
},
security: [
{
[STRATEGY.BEARER]: [],
},
],
})
async resetPassword(
@requestBody({
content: {
[CONTENT_TYPE.JSON]: {
schema: getModelSchemaRef(ResetPassword, {partial: true}),
},
},
})
req: ResetPassword,
@param.header.string('Authorization') auth: string,
): Promise<User> {
return this.authService.changepassword(req, auth);
}
@ratelimit(false)
@authenticate(STRATEGY.BEARER)
@authorize(['*'])
@get('/auth/me', {
description: ' To get the user details',
security: [
{
[STRATEGY.BEARER]: [],
},
],
responses: {
[STATUS_CODE.OK]: {
description: 'User Object',
content: {
[CONTENT_TYPE.JSON]: AuthUser,
},
},
...ErrorCodes,
},
})
async userDetails(
@inject(RestBindings.Http.REQUEST) req: Request,
): Promise<AuthUser> {
return this.authService.getme(req.headers.authorization);
}
If you've noticed a bug or have a question or have a feature request, search the issue tracker to see if someone else in the community has already created a ticket. If not, go ahead and make one! All feature requests are welcome. Implementation time may vary. Feel free to contribute the same, if you can. If you think this extension is useful, please star it. Appreciation really helps in keeping this project alive.
Please read CONTRIBUTING.md for details on the process for submitting pull requests to us.
Code of conduct guidelines here.
FAQs
A rate limiting extension for loopback-next APIs by ARC
We found that loopback4-ratelimiter demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Security experts warn that recent classification changes obscure the true scope of the NVD backlog as CVE volume hits all-time highs.
Security Fundamentals
Attackers use obfuscation to hide malware in open source packages. Learn how to spot these techniques across npm, PyPI, Maven, and more.
Security News
Join Socket for exclusive networking events, rooftop gatherings, and one-on-one meetings during BSidesSF and RSA 2025 in San Francisco.