2012-03-01 53 views
40

Me preguntaba cómo obtendría el nombre del usuario actual en JavaScript como parte de un documento HTML.JavaScript - Cómo obtener el nombre del usuario actual

En Java, uno escribiría System.getProperty("user.name"); para lograrlo. ¿Cuál es la alternativa a esto en JavaScript?

+0

¿Usuario actual? Es un gran riesgo de seguridad cuando eso es posible en JavaScript. –

+3

Nombre de usuario en contexto a qué? –

+1

Cuando ha iniciado sesión en su computadora, tiene un nombre de usuario. Esto es lo que deseo obtener. – Confiqure

Respuesta

62

JavaScript se ejecuta en el contexto del documento HTML actual, por lo que no podrá determinar nada sobre un usuario actual a menos que esté en la página actual o haga llamadas AJAX a un script del lado del servidor para obtener más información .

JavaScript no podrá determinar su nombre de usuario de Windows.

+4

¿Cómo va a obtener un script del lado del servidor más información sobre el usuario actual del sistema operativo del cliente? –

+0

Puede ejecutar un script en localhost ...? Hice esa sugerencia antes de que el póster hiciera la nota de que quiere el nombre de usuario del SO del cliente. –

+1

@DaggNabbit Es bastante común establecer la identidad del usuario en el lado del servidor, utilizando SSPI o GSSAPI. –

5

Creo que no es posible hacer eso. Sería un gran riesgo para la seguridad si un acceso del navegador a ese tipo de información personal

10

Si el script se ejecuta en Microsoft Windows en una HTA o similares, se puede hacer esto:

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

lo contrario, como otros han señalado, no tienes suerte. Esto se considera información privada y el navegador no lo proporciona al motor de JavaScript.

+0

El navegador sí tiene acceso al nombre de usuario del sistema (o cualquier información del sistema para ese asunto); sin embargo, el navegador no lo expone al motor JS. – Snuffleupagus

+0

@ user1090190 lo suficientemente justo, editado. –

27

No hay totalmente compatible alternativa en JavaScript, ya que posee un problema de seguridad inseguro para permitir que el código del lado del cliente a tomar conciencia del usuario conectado.

Dicho esto, el siguiente código le permitiría obtener el nombre de usuario conectado, pero solo funcionará en Windows, y solo dentro de Internet Explorer, ya que utiliza ActiveX. Además, es muy probable que Internet Explorer muestre una ventana emergente que le alerta sobre los posibles problemas de seguridad asociados con el uso de este código, lo que no ayudará precisamente a la usabilidad.

<!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> 

Como Sueños surrealistas sugirió que podría utilizar AJAX para llamar a un método de servidor que sirve de vuelta el nombre de usuario, o hacer que el HTML con un campo oculto con un valor del usuario conectado, por ejemplo,

(ASP.NET MVC 3 sintaxis)

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

Votaré por una segunda opción para este asunto. – mutanic

+1

No entendí del todo el ejemplo de ASP.Net. ¿Recibe el nombre de usuario que está conectado en el sistema .Net o el nombre de usuario de la máquina local (de eso se trata la pregunta)? – igorsantos07

+0

Depende del modo de autenticación que use. Si está utilizando la opción de Seguridad de Windows User.Identity.Name devolverá el nombre de usuario de Windows – Greg

-1

trabajo para mí en IE:

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

... pero los controles ActiveX debe estar encendido en la configuración de seguridad.

+2

Esto realmente no agrega ninguna información que http://stackoverflow.com/a/9518490/1089331 ya no cubra –

Cuestiones relacionadas