Customizing requests from the Journey module in JavaScript
PingOne Advanced Identity Cloud PingAM JavaScript
The Orchestration SDK for JavaScript supports the RequestMiddleware type for adding custom logic to network requests.
You can use this request middleware to modify requests before they’re sent.
For example, you can add or customize:
-
Query parameters
-
Headers
-
Body data
|
You can add the commonly-used Learn more in Starting an authentication journey in JavaScript. |
Step 1. Creating request middleware instances
To customize network requests, create one or more RequestMiddleware instance:
const loggingMiddleware = (req, action, next) => {
switch (action.type) {
case 'JOURNEY_START':
console.log(`Starting auth journey: ${req.url}`);
break;
}
next();
}
Request middleware has the following inputs:
- Request object
-
Represents the original request, and has information about the body, method type, parameters, and more.
- Action object
-
Represents the type of operation the request performs. You can check
action.typeto only apply customizations to certain requests.Available action types are as follows:
Value Description JOURNEY_STARTInitial call to an authentication tree
JOURNEY_NEXTProceeding through an authentication tree flow
JOURNEY_TERMINATETerminate a session
- Next method
-
Proceeds to the next middleware, if configured.
Examples
To customize requests, create middleware that alters requests with your own values.
-
Headers
-
Query parameters
-
Body data
const customHeaderMiddleware = (req, action, next) => {
req.headers.set('X-User-Agent', 'MyApp/1.0');
next();
}
|
Update the Accepted Headers (optional) property in your CORS configuration to include any new headers you add in your middleware. Learn more in Allow cross-domain requests with CORS. |
const customParamMiddleware = (req, action, next) => {
req.url.searchParams.set('lang', 'en-UK');
req.url.searchParams.set('brand', 'example.co.uk');
next();
}
const customJSONPost = (req, action, next) => {
// Add JSON body data to a POST request
req.body = (JSON.stringify({ name: 'Babs Jensen', "email": "babs@example.com" }));
req.method = "POST";
next();
}
const customJSONPut = (req, action, next) => {
// Add JSON body data to a PUT request
req.body = (JSON.stringify({ name: 'Updated Name', email: "updated@example.com" }));
req.method = "PUT";
next();
}
const customFormPost = (req, action, next) => {
// Add form-encoded body data to a POST request
const formData = new FormData();
formData.append('name', 'Babs Jensen');
formData.append('email', 'babs@example.com');
req.body = formData;
req.method = "POST";
next();
}
Step 2. Configuring the Journey module to use middleware
Pass the names of your custom middleware to the Journey module in the requestMiddleware parameter in the configuration:
journey moduleconst journeyClient = await journey({
// Custom middleware
requestMiddleware: [
customHeaderMiddleware,
customParamMiddleware,
customFormPost
],
// Other configuration
config: {
serverConfig: {
wellknown: 'https://openam-forgerock-sdks.forgeblocks.com/am/oauth2/realms/alpha/.well-known/openid-configuration',
},
},
});