IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Internal server error


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2023
    Messages : 1
    Par défaut Internal server error
    Bonjour,
    J'ai une préoccupation, je développe actuellement une appli en rad server et angular, j'ai créé deux composants cote angular: un pour la création de compte et l'autre pour la connexion, j'ai testé ma fonction connexion que j'ai implémenté en rad server sur Postman et ça marche très bien, cependant, quand je vais sur la page de connexion pour se connecter j'obtiens ces erreurs: Angular Failed to load resource: the server responded with a status of 500 (Internal Server Error) et Rad server {"Thread":22052,"Error":{"Type":"HTTP","Code":"500","Reason":"Error","Error":"","Description":"Violation d'accès à l'adresse 5B0B3DA3 dans le module 'ApiResource.bpl'. Lecture de l'adresse 00000000"}}

    Voici le code de la fonction connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    {
       Fonction permettant à l'utilisateur de se connecter
      }
     
      procedure TUtilisateurResource1.Login(const AContext: TEndpointContext;
       const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
       var
       myObject: TJSONObject;
      userEmail, passcode: string;
    begin
      try
        myObject := ARequest.Body.GetObject;
        userEmail := myObject.GetValue('email').Value;
        passcode := myObject.GetValue('mdp').Value;
        FDQuery1.Close;
        FDQuery1.SQL.Clear;
        FDQuery1.SQL.Text := 'SELECT COUNT(*) FROM utilisateur WHERE email = :userEmail';
        FDQuery1.ParamByName('userEmail').Value := userEmail;
        FDQuery1.Open();
     
        if (not FDQuery1.IsEmpty) and (FDQuery1.Fields[0].AsInteger > 0) then
        begin
          FDQuery1.Close();
          FDQuery1.SQL.Text := 'SELECT COUNT(*) FROM utilisateur WHERE email = :userEmail AND mdp = :passcode';
          FDQuery1.ParamByName('userEmail').Value := userEmail;
          FDQuery1.ParamByName('passcode').Value := passcode;
          FDQuery1.Open();
     
          if (not FDQuery1.IsEmpty) and (FDQuery1.Fields[0].AsInteger > 0) then
          begin
            AResponse.Body.SetValue(TJSONTrue.Create, True);
            AResponse.StatusCode := 200;
          end
          else
          begin
            AResponse.Body.SetValue(TJSONFalse.Create, True);
            AResponse.StatusCode := 401; // Unauthorized
          end;
        end
        else
        begin
          AResponse.Body.SetValue(TJSONFalse.Create, True);
          AResponse.StatusCode := 401; // Unauthorized
        end;
      finally
        FDQuery1.Close();
      end;
       end;

  2. #2
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Bonjour

    Il ne devrait pas y avoir de différence entre l'appel via Angular et l'appel via Postman. Les deux devraient générer la même violation d'accès sauf si tu as des paramètres différents et qu'ils sont nécessaires pour ton programme.

    As-tu tenté un déboggage en lançant ton server depuis Delphi et en y accédant en localhost depuis ton site ?

    Es-tu sûr d'avoir bien passé "email" et "mdp" lors de ton appel depuis le formulaire de connexion ?

    Ajoute des try...except autour de la récupération des données venant de l'extérieur et fais toi une log sous forme de fichier texte pour avoir les infos si tu n'arrives pas à débogguer. Il y a aussi des outils permettant de récupérer la pile d'appel et d'autres trucs lors de plantâmes comme par exemple Eurekalog ou des choses pour faire de l'analyse du fonctionnement des programmes en s'envoyant des traces comme par exemple CodeSite. N'hésite pas à les mettre en place (au moins en DEBUG).

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    oui, c'est un des points les plus important quand on fait du Web, ne jamais croire ce que dit le client. Un hacker tentera toujours de passer des valeurs inattendues au serveur pour essayer de trouver une faille.

    sur un site marchant que je gère j'ai vu un hacker tenter de faire une commande avec 1 article et le même article avec une quantité à -1 pour avoir un prix total à 0...je n'y avais pas songé mais heureusement ma procédure n'a pas accepté la commande

    plus connu il y a les injections SQL, tu mets comme mot de passe "' OR '' ='" en espérant que ça donne "... WHERE PASSWORD = '' OR '' = '' ..." si le paramètre est simplement concaténé au lieu d'utiliser une requête paramétrée.

    donc, dans ton cas, il faut gérer le cas où les paramètres email ou mdp ne sont pas renseignés.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 595
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    cela ne répondra pas à la question, mais je suggérerai déjà de simplifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      FDQuery1.Close;
        FDQuery1.SQL.Clear;
        FDQuery1.SQL.Text := 'SELECT COUNT(*) FROM utilisateur WHERE email = :userEmail';
        FDQuery1.ParamByName('userEmail').Value := userEmail;
        FDQuery1.Open();
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fdquery1.Open('SELECT COUNT(*) FROM utilisateur WHERE email = :userEmail', [userEmail]);
    plus court (1 instruction au lieu de 5) donc plus facile à lire

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    GetObject directement retourne un TJSONObject, tu ne verifie pas le ContentType si c'est "multipart/form-data" ou "application/json" ?

    Aucun try except pour capturer l'exception, faut il aller ligne par ligne pour voir celle qui provoque une erreur

    Comment est géré la concurrence ?
    FDQuery1 est-il dupliqué pour chaque thread de requete ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Internal Server Error
    Par johanlft dans le forum Web
    Réponses: 3
    Dernier message: 09/10/2006, 22h59
  2. Internal Server Error : Script CGI
    Par DarkBlue3000 dans le forum Apache
    Réponses: 7
    Dernier message: 11/08/2006, 14h27
  3. Internal Server Error Perl
    Par mercenaire_bis dans le forum Web
    Réponses: 2
    Dernier message: 12/07/2006, 16h16
  4. [SERVLET][STRUTS]Error 500--Internal Server Error
    Par Devil666 dans le forum Struts 1
    Réponses: 7
    Dernier message: 27/06/2005, 13h07
  5. [RegEx] [regex][serveur] Internal server error
    Par Maxoo dans le forum Langage
    Réponses: 8
    Dernier message: 29/12/2004, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo