2015-01-12 16 views
7

Tôi có dự án ASP.Net MVC và tôi đang cố gắng lấy tên người dùng cửa sổ máy khách (phía máy khách luôn chạy trên máy Windows) và chuyển tên người dùng cửa sổ sang phía máy chủ sử dụng Node.JS. Làm cách nào để có được tên người dùng cửa sổ hiện tại bằng cách sử dụng node.js? Tôi đang cố gắng tìm một cái gì đó tương tự như WindowsIdentity.GetCurrent(). Tên trong C# cho node.js hoặc lệnh whoamI trong CMD.Node.Js-Bắt tên người dùng cửa sổ hiện tại

+0

Nó không phải là lần đầu tiên rõ ràng ở đây khi bạn đang sử dụng các cửa sổ hạn bạn đang đề cập đến hệ điều hành. – Dawson

+0

Tên người dùng Windows hiện tại không phải là những gì bạn muốn (đó sẽ là người dùng đang chạy quy trình máy chủ). Bạn cần xác thực NTLM. – SLaks

Trả lời

13

Để có được hiện tại đăng nhập username:

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

không hoạt động cho tôi dưới linux nhưng tôi có thể tìm thấy người dùng theo '' process.env.USER'' –

+0

Là "domainName" cho tôi theo Win7 – dude

+1

Tôi đã có thể nhận được từ quá trình process.env.USERDOMAIN. env.USERNAME – afreeland

4

Mặc dù nút có chức năng hệ điều hành được xây dựng osos.hostname() để trả lại tên máy chủ, bạn sẽ cần truy cập tên máy chủ của máy khách trong ASP.NET hoặc ngôn ngữ bạn chọn. Bạn không thể làm điều đó trong nút vì nó đang chạy ở phía máy chủ và không có gì để làm với thông tin địa phương của khách hàng.

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

Nhìn vào câu hỏi này

Determine Client's Computer Name

GET KHÁCH HÀNG HOST NAME trong ASP.NET AKA KHÁCH HÀNG PHỤ

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

muỗng FEED cho lười biếng

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

Được bỏ phiếu vì bạn dường như đã xem xét những gì đang được hỏi. Anh ấy đang tìm kiếm tên người dùng hiện tại. – Dawson

+0

Bỏ phiếu bầu đã bị xóa. Tôi cho rằng anh ta sẽ có khách hàng của mình chạy nút ... Tôi dường như không hiểu trường hợp sử dụng mà anh ta đang làm. – Dawson

+0

Cảm ơn bạn đã trả lời, tuy nhiên Os.hostname trả về tên máy tính, không phải là userID trong Active Directory. – Benjamin

1

Tôi tin rằng bạn đang nói rằng bạn có một ứng dụng Asp.NET, và muốn sử dụng Node.js để xác định người dùng hiện tại username, và sau đó trình ASP của bạn. Ứng dụng NET.

Tôi không phát triển trên Windows mặc dù từ this question Tôi tin rằng điều này có thể được lưu trữ dưới dạng biến môi trường. process.env là một bản đồ javascript/dict của các biến môi trường và có khả năng chứa tên người dùng.

Hoặc bạn có thể phân tích nó từ thư mục người dùng gia đình như vậy:

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

Các câu hỏi tôi liên kết ở trên ngụ ý rằng USERPROFILE quyết tâm C:\Users\USERNAME\. Sau đó tôi chia đường dẫn và lấy phần tử thứ 3, làm tên người dùng.

Một lần nữa, tôi không có máy tính cửa sổ và không thể xác nhận điều này. Hy vọng điều này đặt bạn xuống con đường bên phải mặc dù.

Chúc mừng.

7

Tôi hiểu rằng điều này sẽ không cung cấp cho người sử dụng khách hàng của một ứng dụng web như OP hỏi, nhưng câu hỏi này là rất cao trong kết quả tìm kiếm cố gắng để có được người dùng đã đăng nhập khi chạy một ứng dụng Node cục bộ.

Bạn có thể tái tạo các <domain>\<username> sản lượng whoamIWindowsIdentity.GetCurrent() với các biến môi trường trong Windows.

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

Nếu bạn muốn sử dụng USERPROFILE:

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

2

Có người đã tạo ra một module gọi username mà làm tất cả các công việc khó khăn cho bạn.

Bạn sử dụng nó như

var username = require('username'); 

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

Thay thế, bạn chỉ có thể chạy lệnh "WHOAMI" CMD trong node.js sử dụng mô-đun child_process. Tôi đã cung cấp giải pháp của tôi ở bên dưới. – Benjamin

+0

Điều đó không tạo ra bằng chứng rất tương lai hoặc đơn giản như sử dụng mô-đun của người khác. – Jared

Các vấn đề liên quan