Firebase función en la nube Admin SDK – listado de usuarios – problema con la paginación
He implementado una función HTTP llamable para obtener todos los usuarios. Como puedes ver en mi código, el problema es que requestedPageToken
(desde la llamada del cliente) es el mismo que listUsersResult.pageToken
(retornado desde la función listusers
). Mi aplicación cliente llama a esta función una y otra vez con el mismo token, pero sólo obtiene la primera página de usuarios porque listUsersResult
devuelve el mismo token y no el siguiente token de página. Aquí está mi código de TypeScript:
export const listAllUsers = functions.https.onCall((data, context) => {
try {
if (data !== null) {
const requestedPageToken = data.text;
console.log("PageToken is: " + data);
return admin.auth().listUsers(50, requestedPageToken)
.then((listUsersResult) => {
console.log("New PageToken is: " + listUsersResult.pageToken);
return listUsersResult;
}).catch((reason) => {
return Promise.reject(
new Error(reason));
});
} else {
return admin.auth().listUsers(50);
}
} catch (error) {
console.error("Error: " + error);
return Promise.reject(error);
}
});
No pude encontrar dónde está el problema. ¿Por qué no estoy obteniendo el token para los siguientes 50 usuarios?
davy.ai
El problema radica en la forma en que se está utilizando
requestedPageToken
en la función. El valor dedata.text
se asigna arequestedPageToken
en lugar dedata.pageToken
. Esto significa querequestedPageToken
siempre es nulo o indefinido, por lo que la función siempre devuelve la primera página de usuarios. Para solucionar esto, reemplaceconst requestedPageToken = data.text;
conconst requestedPageToken = data.pageToken;
en el código. Al hacer esto, se pasará el valor correcto depageToken
a la funciónlistUsers()
, y la función debería devolver la siguiente página de usuarios.