https://github.com/nlang/serverless-offline-local-authorizers-plugin
Plugin for adding local authorizers when developing locally with serverless-offline
https://github.com/nlang/serverless-offline-local-authorizers-plugin
Last synced: 5 months ago
JSON representation
Plugin for adding local authorizers when developing locally with serverless-offline
- Host: GitHub
- URL: https://github.com/nlang/serverless-offline-local-authorizers-plugin
- Owner: nlang
- License: mit
- Created: 2020-02-23T14:37:43.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-03-16T12:17:40.000Z (over 2 years ago)
- Last Synced: 2025-10-03T09:47:49.803Z (9 months ago)
- Language: TypeScript
- Size: 595 KB
- Stars: 16
- Watchers: 0
- Forks: 22
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# serverless-offline-local-authorizers-plugin
[Serverless](http://www.serverless.com) plugin for adding authorizers when developing and testing
functions locally with [serverless-offline](https://github.com/dherault/serverless-offline).
[](http://www.serverless.com)
[](https://www.npmjs.com/package/serverless-offline-local-authorizers-plugin)
[](https://www.npmjs.com/package/serverless-offline-local-authorizers-plugin)
This plugin allows you to add local authorizer functions to your serverless projects. These authorizers
are added dynamically in a way they can be called by `serverless-offline` but don't interfer with your
deployment and your shared authorizer functions. This helps when you have shared API Gateway authorizers
and developing and testing locally with `serverless-offline`.
> :warning: **If you are using this plugin and get schema validation errors**: Please check indentation of `localAuthorizer:` config property! See example below...
## Installation
Installing using npm:
```
npm i serverless-offline-local-authorizers-plugin --save-dev
```
## Usage
*Step 1:* Define your authorizer functions in a file of your choice (.js, .mjs, .ts and others) and later you will inform the path and name or file default called `local-authorizers.js` and put it into your
project root (that's where your `serverless.yml` lives).
If you want the local function to call your deployed shared authorizer it could look something
like this:
```javascript
const AWS = require("aws-sdk");
const mylocalAuthProxyFn = async (event, context) => {
const lambda = new AWS.Lambda();
const result = await lambda.invoke({
FunctionName: "my-shared-lambda-authorizer",
InvocationType: "RequestResponse",
Payload: JSON.stringify(event),
}).promise();
if (result.StatusCode === 200) {
return JSON.parse(result.Payload);
}
throw Error("Authorizer error");
};
module.exports = { mylocalAuthProxyFn };
```
Of course you could also just return a mocked response, call Cognito to mock your Cognito Authorizer or
whatever suits your needs. You can also define multiple authorizer functions if you need to.
*Step 2:* In your `serverless.yml`, add the `localAuthorizer` property to your http events. This will not interfere
with your "real" authorizers and will be ignored upon deployment.
```yaml
functions:
myFunction:
handler: myFunction.handler
events:
- http:
path: /my/api/path
method: GET
authorizer:
type: CUSTOM
authorizerId: abcjfk
localAuthorizer:
name: "mylocalAuthProxyFn"
pathFile: "local-authorizers.js" # Optional
type: "request"
```
*Step 3:* Add the plugin to the plugins sections in `serverless.yml`:
```yaml
plugins:
- serverless-offline-local-authorizers-plugin
- serverless-offline
```
*Step 4:* Fire up serverless offline with the `local-authorizers` option:
```yaml
$ sls offline local-authorizers --stage dev --region eu-central-1
```
## License
MIT