2015-01-12 10 views
7

Ho un progetto di ASP.Net MVC, e sto cercando di ottenere il nome utente di Windows client (il lato client è sempre in esecuzione sulla macchina Windows) e passare il nome utente di Windows al lato server utilizzando Node.JS. Come posso ottenere il nome utente corrente di windows usando node.js? Sto cercando di trovare qualcosa di simile a WindowsIdentity.GetCurrent(). Nome in C# per node.js o whoamI comando in CMD.Node.JS-Ottenere finestre attuali nome utente

+0

Non era chiaro prima qui quando si utilizzano le finestre termine si stia riferendo al sistema operativo. – Dawson

+0

Il nome utente corrente di Windows non è quello che si desidera (sarebbe l'utente che esegue il processo del server). Hai bisogno dell'autenticazione NTLM. – SLaks

risposta

13

per ottenere la corrente collegato username:

var path = require('path'); 
var userName = process.env['USERPROFILE'].split(path.sep)[2]; 
var loginId = path.join("domainName",userName); 
console.log(loginId); 
+3

non ha funzionato per me sotto linux ma potrei individuato l'utente sotto '' process.env.USER'' –

+0

è "domainname" per me sotto Win7 – dude

+1

sono stato in grado di ottenere da processo process.env.USERDOMAIN. env.USERNAME – afreeland

4

Anche se il nodo è il costruito in funzione del sistema operativo os e os.hostname() per restituire il nome host, è necessario accedere hostname del client in ASP.NET o nella lingua di vostra scelta. Non è possibile farlo nel nodo poiché è in esecuzione sul lato server e non ha nulla a che fare con le informazioni locali del client.

> require('os') 
> os.hostname() 

Guardate questa domanda

Determine Client's Computer Name

ottenere il nome del client di Host in ASP.NET AKA lato client

System.Net.Dns.GetHostEntry(Request.ServerVariables["REMOTE_HOST"]).HostName;

CUCCHIAIO FEED per i pigri

string IP = Request.UserHostName; 
string compName = CompNameHelper.DetermineCompName(IP); 

code from compnamehelper: 

public static string DetermineCompName(string IP) 
    { 
     IPAddress myIP = IPAddress.Parse(IP); 
     IPHostEntry GetIPHost = Dns.GetHostEntry(myIP); 
     List<string> compName = GetIPHost.HostName.ToString().Split('.').ToList(); 
     return compName.First(); 
    } 

MICROSOFT DOCUMENTATION

+1

Giù votati perché sembra che tu abbia superato quello che viene chiesto. Sta cercando di ottenere il nome utente degli utenti correnti. – Dawson

+0

Giù votato rimosso. Immaginavo che avrebbe avuto i suoi clienti su un nodo ... Non capisco il caso d'uso che sta cercando. – Dawson

+0

Grazie per la risposta, tuttavia Os.hostname restituisce il nome del computer, non l'ID utente in Active Directory. – Benjamin

1

Credo che si sta affermando che si dispone di un'applicazione Asp.NET, e vorrebbe utilizzare Node.js per determinare gli attuali utenti nome utente, e quindi inviare al vostro Asp. Applicazione NET.

non sviluppare su Windows se dal this question Credo che questo può essere memorizzato come una variabile di ambiente. process.env è una mappa javascript/dict di variabili di ambiente e probabilmente contiene il nome utente degli utenti.

In alternativa è possibile analizzarlo dalla directory home dell'utente in quanto tale:

var path = require('path'); var username = path.sep(process.env['USERPROFILE'])[2];

La domanda ho linkato sopra implica che USERPROFILE risolve a C:\Users\USERNAME\. Quindi divido il percorso e prendo il terzo elemento, essendo il nome utente.

Ancora una volta, non ho una macchina Windows e non ha potuto confermare questo. Spero che questo ti spinga sulla strada giusta.

Cheers.

7

Capisco che questo non darà all'utente client di una web app come richiesto OP, ma questa domanda è molto alta nei risultati di ricerca per cercare per ottenere l'utente che ha effettuato l'accesso durante l'esecuzione locale di un'applicazione del nodo.

è possibile riprodurre il <domain>\<username> uscita del whoamI e WindowsIdentity.GetCurrent() con le variabili di ambiente in Windows.

process.env.USERDOMAIN + '\\' + process.env.USERNAME

Se si vuole usare USERPROFILE:

process.env.USERDOMAIN + '\\' + process.env.USERPROFILE.split('\\').pop()

2

Qualcuno ha creato un modulo chiamato username che fa tutto il lavoro duro per voi.

lo si utilizza come

var username = require('username'); 

console.log(username.sync()); 
+0

In alternativa, è possibile eseguire semplicemente il comando CMD "WHOAMI" in node.js utilizzando il modulo child_process. Ho fornito la mia soluzione in basso. – Benjamin

+0

Questo non suona molto a prova di futuro o semplice come usare il modulo di qualcun altro. – Jared