Impersonate a user

Impersonating a user allows you to login as one of your customers. It can be useful to help your customers debug an issue or to get a better understanding of what they see on their account (in your app).

The following example shows how to create an Impersonate Action on a collection named users.

1.Create the "Impersonate" action

To declare the Impersonate Smart Action for the collection users, add it to the corresponding file in your /forest folder:

SQL
MongoDB
SQL
forest/users.js
const { collection } = require('forest-express-sequelize');
collection('users', {
actions: [{
name: 'Impersonate'
}],
});
MongoDB
forest/users.js
const { collection } = require('forest-express-mongoose');
collection('users', {
actions: [{
name: 'Impersonate'
}],
});

2. Declare the route

To implement the Impersonate behaviour, head over to the /routes folder:

SQL
MongoDB
SQL
routes/users.js
router.post('/actions/impersonate',
(req, res) => {
let userId = req.body.data.attributes.ids[0];
response.send({
webhook: { // This is the object that will be used to fire http calls.
url: 'https://my-app-url/login', // The url of the company providing the service.
method: 'POST', // The method you would like to use (typically a POST).
headers: { }, // You can add some headers if needed (you can remove it).
body: { // A body to send to the url (only JSON supported).
adminToken: 'your-admin-token',
},
},
success: `Impersonating user ${userId}`, // The success message that will be toasted.
redirectTo: 'https://my-app-url/', // Force the redirection to your app if needed.
});
});
module.exports = router;
MongoDB
routes/users.js
router.post('/actions/impersonate',
(req, res) => {
let userId = req.body.data.attributes.ids[0];
response.send({
webhook: { // This is the object that will be used to fire http calls.
url: 'https://my-app-url/login', // The url of the company providing the service.
method: 'POST', // The method you would like to use (typically a POST).
headers: { }, // You can add some headers if needed (you can remove it).
body: { // A body to send to the url (only JSON supported).
adminToken: 'your-admin-token',
},
},
success: `Impersonating user ${userId}`, // The success message that will be toasted.
redirectTo: 'https://my-app-url/', // Force the redirection to your app if needed.
});
});
module.exports = router;

This is useful for authentication using cookies. By using this exemple, you're performing the login request directly from the browser. Thus, the cookies will be automatically sent from your own service to the browser (as you'd normally do with your own app).