2012-03-01 9 views
40

Tôi đã tự hỏi làm thế nào tôi sẽ có được tên của người dùng hiện tại trong JavaScript như một phần của tài liệu HTML.JavaScript - Cách lấy tên của người dùng hiện tại

Trong Java, người ta sẽ nhập System.getProperty("user.name"); để đạt được điều này. Việc thay thế điều này trong JavaScript là gì?

+0

Người dùng hiện tại? Đó là một nguy cơ bảo mật rất lớn khi có thể trong JavaScript. –

+3

Tên người dùng trong ngữ cảnh là gì? –

+1

Khi bạn đăng nhập vào máy tính, bạn có tên người dùng. Đây là những gì tôi muốn nhận được. – Confiqure

Trả lời

62

JavaScript chạy trong ngữ cảnh của tài liệu HTML hiện tại, vì vậy nó sẽ không thể xác định bất kỳ điều gì về người dùng hiện tại trừ khi đang ở trang hiện tại hoặc bạn thực hiện cuộc gọi AJAX đến tập lệnh phía máy chủ để biết thêm thông tin .

JavaScript sẽ không thể xác định tên người dùng Windows của bạn.

+4

Làm thế nào là một kịch bản phía máy chủ sẽ nhận được thêm thông tin về người dùng hiện tại của hệ điều hành khách hàng? –

+0

Bạn có thể chạy tập lệnh trên máy chủ cục bộ ...? Tôi đã đưa ra gợi ý đó trước khi áp phích tạo ra ghi chú rằng anh ta muốn tên người dùng hệ điều hành máy khách. –

+1

@DaggNabbit Nó khá phổ biến để thiết lập danh tính của người dùng ở phía máy chủ, sử dụng SSPI hoặc GSSAPI. –

5

Tôi nghĩ không thể làm điều đó. Nó sẽ là một nguy cơ bảo mật rất lớn nếu một truy cập trình duyệt với loại thông tin cá nhân

10

Nếu kịch bản đang chạy trên Microsoft Windows trong một HTA hoặc tương tự, bạn có thể làm điều này:

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

Nếu không, như những người khác đã chỉ ra, bạn đã hết may mắn. Đây được coi là thông tin cá nhân và không được trình duyệt cung cấp cho công cụ javascript.

+0

Trình duyệt thực sự có quyền truy cập vào tên người dùng của hệ thống (hoặc bất kỳ thông tin hệ thống nào cho vấn đề đó) - tuy nhiên, trình duyệt không hiển thị nó với công cụ JS. – Snuffleupagus

+0

@ user1090190 đủ công bằng, được chỉnh sửa. –

27

Không có tương thích hoàn toàn thay thế trong JavaScript vì nó sở hữu một vấn đề an ninh an toàn để cho phép client-side code để trở thành nhận thức của người dùng đăng nhập.

Điều đó nói rằng, mã sau đây sẽ cho phép bạn nhận tên người dùng đã đăng nhập, nhưng nó sẽ chỉ hoạt động trên Windows và chỉ trong Internet Explorer, vì nó sử dụng ActiveX. Ngoài ra Internet Explorer rất có thể sẽ hiển thị một cửa sổ bật lên thông báo cho bạn về các vấn đề bảo mật có thể xảy ra liên quan đến việc sử dụng mã này, điều này sẽ không chính xác giúp khả năng sử dụng.

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

Như Kì quái Dreams gợi ý bạn có thể sử dụng AJAX để gọi một phương pháp server-side phục vụ trở lại tên người dùng, hoặc làm cho HTML với một đầu vào ẩn với một giá trị của người dùng đăng nhập, cho ví dụ

(ASP.NET MVC 3 cú pháp)

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

Tôi sẽ bỏ phiếu cho lựa chọn thứ hai cho vấn đề này. – mutanic

+1

Tôi đã không hoàn toàn undestand ví dụ ASP.Net. Có phải tên người dùng đã đăng nhập vào hệ thống .Net hay tên người dùng máy cục bộ (đó là câu hỏi gì)? – igorsantos07

+0

Tùy thuộc vào chế độ xác thực bạn sử dụng. Nếu bạn đang sử dụng tùy chọn Bảo mật Windows User.Identity.Name sẽ trả lại tên người dùng Windows – Greg

-1

Làm việc cho tôi trên IE:

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

... nhưng các điều khiển ActiveX cần phải được trên trong cài đặt bảo mật.

+2

Điều này không thực sự thêm bất kỳ thông tin nào mà http://stackoverflow.com/a/9518490/1089331 chưa bao gồm –