2010-07-21 18 views
2

J'ai actuellement une application Palm WebOS qui utilise une requête Ajax.Request pour se connecter à un service Web en utilisant l'authentification de base. Pour envoyer le nom d'utilisateur et mot de passe, je l'insère simplement dans l'url (http://username:[email protected]:port/) qui fonctionne très bien, attendez-vous lorsque le mot de passe contient autre chose que des caractères alphanumériques (par exemple, un utilisateur m'a envoyé un e-mail "et un" & "dans son mot de passe, et il n'a pas pu se connecter car les symboles n'étaient pas correctement analysés pour l'url). Y at-il un moyen d'envoyer les informations d'identification dans l'URL afin que je puisse autoriser les utilisateurs à utiliser autre chose que des caractères alphanumériques dans leurs mots de passe?Utilisation de l'authentification avec Ajax.Request

var username = cookie.get().servers[this.serverIndex].username; 
    var password = cookie.get().servers[this.serverIndex].password; 
    this.auth = 'Basic ' + Base64.encode(username + ':' + password); 
    var baseUrl = 'http://' + url + ':' + port + '/gui/'; 
    this.baseUrl = baseUrl; 


    var request = new Ajax.Request(this.tokenUrl, { 
     method: 'get', 
     timeout: 2000, 
     headers: { 
      Authorization: this.auth 
     }, 
     onSuccess: successFunc, 
     onFailure: this.failure.bind(this) 
    }); 

La réponse est (je l'ai enlevé l'URL pour des raisons de sécurité):

{"request": {"options": {"method": "get", "asynchronous": true, "contentType": "application/x-www-form-urlencoded", "encoding": "UTF-8", "parameters": {}, "evalJSON": true, "evalJS": true, "timeout": 2000, "headers": {"Authorization": "Basic c3VubW9yZ3VzOmZyb2dneUAlMjY="}}, "transport": {"readyState": 4, "onloadstart": null, "withCredentials": false, "onerror": null, "onabort": null, "status": 401, "responseXML": null, "onload": null, "onprogress": null, "upload": {"onloadstart": null, "onabort": null, "onerror": null, "onload": null, "onprogress": null}, "statusText": "", "responseText": "", "UNSENT": 0, "OPENED": 1, "HEADERS_RECEIVED": 2, "LOADING": 3, "DONE": 4}, "url": "" 

Répondre

3

Envoyer les informations d'authentification de base avec en-tête: http://coderseye.com/2007/how-to-do-http-basic-auth-in-ajax.html

var auth = 'Basic ' + Base64.encode(user + ':' + pass); 
Ext.Ajax.request({ 
    url : url, 
    method : 'GET', 
    headers : { Authorization : auth } 
}); 
+0

Ok, essayé, et je reçois une erreur 401 ... édité mon poste avec mon appel Ajax.Request et ma réponse ... –

+2

Ok, je l'ai eu le travail! J'ai dû changer les 'headers' en 'requestHeaders', et tout fonctionne très bien! Merci! –

0

Vous pouvez essayer de coder le nom d'utilisateur et mot de passe avant qu'ils ne soient envoyés à l'aide encodeURIComponent.

Plus généralement, avez-vous testé cette méthode dans IE8? Parce que cela ne fonctionne plus pour les requêtes normales, le schéma username:[email protected] a été désactivé pour des raisons de sécurité.

Il se peut, cependant, qu'ils soient toujours autorisés dans les requêtes Ajax.

+0

je tentais le encodeURIComponent, et il a converti le « & » mais pas le « @ », il ne fonctionnait toujours pas. En outre, pas besoin de le tester dans IE8 ... si une application Palm WebOS, donc il va seulement courir là ... –

+0

@sunmorgus étrange - il devrait certainement coder le '@'. Mais peut-être qu'il est interprété comme faisant partie de l'URL quand même. –