web-dev-qa-db-fra.com

JavaScript - Comment obtenir le nom de l'utilisateur actuel

Je me demandais comment obtenir le nom de l'utilisateur actuel en JavaScript dans le cadre d'un document HTML.

En Java, on taperait System.getProperty("user.name"); pour y parvenir. Quelle est l'alternative à cela en JavaScript?

49
Confiqure

JavaScript s'exécute dans le contexte du document HTML en cours. Il ne peut donc rien déterminer à propos d'un utilisateur actuel, à moins que ce ne soit dans la page actuelle ou que vous le fassiez AJAX appels à un serveur. script pour obtenir plus d'informations.

JavaScript ne pourra pas déterminer votre nom d'utilisateur Windows.

76
Surreal Dreams

Il n’existe pas d’alternative entièrement compatible en JavaScript, car elle pose un problème de sécurité dangereux permettant au code côté client de prendre connaissance de l'utilisateur connecté.

Cela dit, le code suivant vous permettrait d’obtenir le nom d’utilisateur connecté, mais il ne fonctionnera que sous Windows et uniquement dans Internet Explorer, car il utilise ActiveX. De plus, Internet Explorer affichera probablement une fenêtre contextuelle vous avertissant des problèmes de sécurité potentiels associés à l'utilisation de ce code, ce qui ne facilitera pas vraiment la convivialité.

<!doctype html>
<html>
<head>
    <title>Windows Username</title>
</head>
<body>
<script type="text/javascript">
    var WinNetwork = new ActiveXObject("WScript.Network");
    alert(WinNetwork.UserName); 
</script>
</body>
</html>

Comme Surreal Dreams suggérait d'utiliser AJAX pour appeler une méthode côté serveur qui restitue le nom d'utilisateur ou rend le HTML avec une entrée cachée avec une valeur de l'utilisateur connecté, par exemple.

(Syntaxe ASP.NET MVC 3)

<input id="username" type="hidden" value="@User.Identity.Name" />
31
Greg

Si le script est exécuté sur Microsoft Windows dans un HTA ou similaire, vous pouvez procéder comme suit:

var wshshell=new ActiveXObject("wscript.Shell");
var username=wshshell.ExpandEnvironmentStrings("%username%");

Sinon, comme d'autres l'ont souligné, vous n'avez pas de chance. Ceci est considéré comme une information privée et n'est pas fourni par le navigateur au moteur javascript.

10
Dagg Nabbit

Je pense que ce n'est pas possible. Ce serait un risque énorme pour la sécurité si un navigateur accédait à ce type d'informations personnelles

6
Micho

Travailler pour moi sur IE:

<script type="text/javascript">
  var WinNetwork = new ActiveXObject("WScript.Network");
  document.write(WinNetwork.UserName);
</script>

... mais les contrôles ActiveX doivent être activés dans les paramètres de sécurité.

0
Kosmi