API et méthode LOGIN

Bonsoir à tous,
J'utilise une API dans une application, et une des méthodes LOGIN permet de se connecter à un compte.
Le problème est que lorsque les mots de passe contiennent des caractères spéciaux comme %,+,/ etc... cela plante.
Quels tests faut-il mettre en place pour éviter ce problème ?
Merci.

Mots clés:

Réponses

  • muqaddarmuqaddar Administrateur

    Il faudrait voir où ça plante et pourquoi.
    C'est l'application qui plante ?
    L'API ?
    L'API qui renvoie un truc qui fait planter l'application ?

    De loin, ça ressemble à un problème d'encodage d'URL.

  • en fait c'est au niveau de l'instruction NSURL que ça plante, de mémoire c'est ce code (je suis au boulot donc je n'ai pas le code source devant moi avant ce soir):

       let string = "http://...."
       let url = NSURL (contentofs: string) 
    
       parser.parse() 
    

    merci

  • LarmeLarme Membre
    décembre 2018 modifié #4

    Percent Escape. C'est ce que tu devrais utiliser, non ?

    Par contre, bizarre de passer des mots de passe dans l'URL.

    Et si tu es en Swft3+, préfères URL à NSURL.

  • OK merci je vais tester,
    en fait c'est la méthode LOGIN de l'API qui est faite de cette façon :
    /api/v2.asmx/login?apiKey=string&username=string&password=string

    et un utilisateur me dit que le mot de passe suivant ne passe pas (il l'a changé depuis) :
    dJ/R+bfD%q9C8A5u}hCD

  • Comme le dit @muqaddar il faudrait voir précisément le message d'erreur qui t'est retourné. Par contre, pour ton problème, je me demande si ça ne vient pas du fait que l'URL contient des caractères interdis. Par exemple, le caractère "}" devrait être remplacé par "%7D". Je ne sais pas si le problème vient effectivement de là mais ce qui est certain c'est qu'en l'état, ton URL ne sera pas correctement formée.

    Ta version :

    https://host/api/v2.asmx/login?apiKey=string&username=string&password=dJ/R+bfD%q9C8A5u}hCD
    

    La version encodée :

    https://host/api/v2.asmx/login?apiKey=string&username=string&password=dJ/R%2BbfD%25q9C8A5u%7DhCD
    
  • Salut à tous,
    Je reviens sur ce problème, j'ai encore un utilisateur qui me dit qu'il ne peut pas synchroniser son compte.
    je me suis mis des { dans mon mot de passe et pour moi cela fonctionne.

    Une partie de mon code est celui-ci :

     let log = Login.init()
    
                    _ = log.parserLog(self.user.trimmingCharacters(in: .whitespacesAndNewlines), self.passwd.trimmingCharacters(in: .whitespacesAndNewlines))
                    self.loginData = log.retourData()
    

    Est-ce qu'il ne faut pas utiliser le trimmingCharacters au niveau du passwd ?

    Merci.

  • Une question peut être stupide mais pourquoi tu n’utilise pas le base64 et les headers http pour tes requêtes ?
    Si tu as la main sur l’ API en question implémente ça plutôt non ?
Connectez-vous ou Inscrivez-vous pour répondre.