Authentification avec un client JavaScript

De RAD Studio
Aller à : navigation, rechercher

Remonter à DataSnap REST


Si vous écrivez un client qui utilise le proxy JavaScript généré pour invoquer des méthodes serveur sur un serveur avec un composant TDSAuthenticationManager configuré, vous aurez probablement besoin (selon que l'implémentation de OnUserAuthenticate et OnUserAuthorize considère ou pas les valeurs pour l'utilisateur et le mot de passe) de passer vos informations d'identification utilisateur au constructeur du proxy JavaScript. Pour ce faire, vous devez d'abord inclure une référence dans votre page web au fichier base64.js qui devrait être inclus dans votre projet si vous avez utilisé l'expert Application REST. Ce fichier peut aussi être trouvé dans le sous-répertoire dsrest de l'emplacement d'installation de RAD Studio.

<script type="text/javascript" src="js/base64.js"></script>

Dès que c'est fait, allez simplement à l'emplacement où vous avez déjà créé une instance de la classe proxy et changez-la de façon à avoir cette nouvelle entrée constructeur :

var Proxy = new TServerMethods1(getAuth(USERNAME,PASSWORD));

La fonction getAuth est une méthode commode qui utilise le fichier base64.js pour encoder le nom d'utilisateur et le mot de passe avec le format requis. USERNAME et PASSWORD doivent être remplacés par leurs valeurs réelles, qui peuvent être remplis selon la méthode de votre choix, telle que la création d'une fiche puis l'extraction de leurs valeurs :

<html> 
<head> 
<title>Exemple Authentification / Autorisation</title> 
<script type="text/javascript" src="base64.js"></script> 
<script type="text/javascript" src="json-min.js"></script> 
<script type="text/javascript" src="ServerFunctionExecutor.js"></script> 
<script type="text/javascript" src="ServerFunctions.js"></script> 
<script type="text/javascript">
  function doEcho()
  {
    var userName = document.getElementById("namefield"); //get the user name from the form
    var password = document.getElementById("passwordfield"); //get the password from the form

    //create the proxy instance with the specified user credentials
    var Proxy = new TServerMethods1(getAuth(userName, password));
    var Response = Proxy.EchoString("Hello World");
    
     //Will show an error message if authorization failed,
    //or the JSON Object of parameters if successful
    alert(Response.toJSONString());
  }
</script> 
</head> 
<body>
  <form onsubmit="doEcho(); return false;">
    <input id="namefield" type="text" /><br />
    <input id="passwordfield" type="text" /><br />
    <input id="runButton" type="submit" value="INVOKE" />
  </form>
</body> 
</html>

Notez que toutes les instances de classe proxy créées, et en fait toute utilisation directe ou indirecte du code ServerFunctionExecutor.js, utiliseront le même ID de session. Cela signifie que dès qu'une méthode serveur unique est invoquée, et jusqu'à l'expiration de cette session, le même ID de session sera utilisé pour tous les prochains appels depuis ce client AJAX. Puisque l'authentification est effectuée une seule fois, et que le nom d'utilisateur et le mot de passe passés sont ignorés dès l'authentification réussie, toute modification apportée au nom d'utilisateur et au mot de passe sera ignorée jusqu'au démarrage d'une nouvelle session.

Voir aussi