Bonjour,
lors de l’appel à la méthode getTexts() de Simplicite.Ajax, j’ai un retour 401Unauthorized dans le navigateur.
Avec comme Root Cause : Missing auth type (e.g. Bearer)
Extrait (simplifié) du code front : var appSimplicite = new Simplicite.Ajax("", "api", "user" , "password"); appSimplicite.getTexts()
En me basant sur ce post ainsi que la release note pour la 5.3, je pense que c’est lié au fait qu’il y est Basic au lieu de Bearer dans l’appel vers /api.
Quels sont les actions possibles dans mon scope pour corriger ce comportement ?
J’ai besoin de mieux comprendre le contexte de votre demande.
S’agit il d’un appel au sein de la UI ou depuis un frontend externe ?
Si vous êtes au sein de la UI ça n’a pas de sens de passer un user/password au Simplicite.Ajax() car vous êtes déjà authentifiés. Ca n’a pas de sens non plus d’utiliser le endpoint API puisque vous êtes mécaniquement sur le endpoint UI
Bref, dans ce contexte, la bonne syntaxe est donc du type:
Je pose la question pour comprendre pourquoi votre attribut URL est vide dans votre instanciation…
PS: utiliser la lib interne Ajax de la UI est un pattern historique à considérer désormais comme deprecated. Pour implementer des frontends externes il est recommandé d’utiliser la lib cliente JS dédiée disponible ici: simplicite - npm. Celle-ci est plus simple et plus moderne et est conçue pour être utilisée au sein des frameworks JS du marché type Vue.js/React/Angular/… Si besoin il y a de boilerplates sur notre GitHub, dites moi quelle technos vous utilisez je vous indiquerai l’exemple approprié.
ATTENTION il faut écrire votre code de manière à ne faire qu’un unique appel initial à login, il ne faut bien entendu pas le faire à chaque appel. Idem pour l’instaciation du Simplicite.Ajax il faut que votre code n’en instancie qu’un seul globalement
Jusqu’en 5.1 il était encore possible d’appeler les services avec une ident/authent Basic auth (= sans devoir appeler login qui est l’appel qui permet de récupérer le token utilisé en Bearer par la suite) mais c’était deprecated depuis la 4.0 et donc fortement découragé.
PS: une des raisons du changement est de simplifier les appels publics (=eviter de devoir utiliser un pseudo-user technique), si votre frontend est accessible publiquement et servi sur la même URL que Simplicité, il serait plus pertinent d’utiliser le endpoint UI public (plutôt que API) qui ne nécessite pas l’utilisation d’ident/authent.
Dans l’exemple indiqué ci-dessus ça donnerait:
const app = new Simplicite.Ajax('', 'uipublic');
app.getTexts(texts => console.log(texts));
Il faut alors juste habiliter le user public à ce qui est appelé publiquement, en pratique ça consite à ajouter des droits au groupe PUBLIC ou des groupes dedroits dans le profil du groupe PUBLIC
NB: Si vous optez pour l’approche publique assurez vous bien que le user public a le pooling d’objets activé (surcharge user du param système USE_WEBSERVICES_OBJECTPOOL à yes):