Vous ne devez pas créer de route /login dans votre UrlMap : pour une application REST, la méthode Login est appelée implicitement lorsqu’une authentification est requise. Pour ajouter votre traitement, il faut redéfinir Login() dans votre classe qui étend %CSP.REST et appeler le parent avec ##super(skipheader), par exemple : [1][2]
ClassMethod Login(skipheader As %Boolean = 1) As %Status [ ProcedureBlock = 0 ]
{
// votre journalisation applicative
Quit ##super(skipheader)
}
Le fait que votre méthode ne soit pas appelée peut venir de la configuration de l’application web REST. Il a été indiqué qu’il faut laisser seulement l’authentification par mot de passe pour cette web application, retirer éventuellement “group by id”, vérifier que UnknownUser n’a pas %ALL, puis tester l’accès ; dans cette configuration, la méthode Login doit être exécutée. Dans votre cas, l’usage du JWT est explicitement mentionné comme différence de configuration. [1][2]
OnPreDispatch n’est pas adapté pour /login, /refresh et /logout : il fonctionne pour vos routes personnalisées, mais pas pour ces routes spéciales. [1][2]
Si vous avez besoin d’un point d’extension fiable autour du login, la piste proposée est d’utiliser une sous-classe de %CSP.SessionEvents, en particulier OnLogin, ou éventuellement OnStartRequest / OnEndRequest selon le besoin de journalisation. [1][2][3]
Sources:
- Se connecter pour publier des commentaires