2012-06-26 19 views
7

Tôi đang xây dựng một Metro C# SkyDrive API trên đầu trang của Live Connect SDK (http://msdn.microsoft.com/en-us/live/ mặc định) - trong Windows 8, người dùng có quyền chọn Đăng nhập vào máy tính Windows 8 bằng tài khoản LOCAL hoặc tài khoản LIVE.Ứng dụng Metro - Cách phát hiện nếu đăng nhập bằng Live ID hoặc Tài khoản cục bộ

Khi sử dụng Live Connect SDK, nếu tôi gọi

// assume wlscopes is properly set 

LiveAuthClient liveAuthClient = new LiveAuthClient(); 
LiveLoginResult loginResult = await liveAuthClient.LoginAsync(wlscopes); 

// do some stuff on skydrive 

liveAuthClient.Logout(); // <-- issue only with live account, not local 

khi sử dụng một tài khoản cục bộ, nó có thể ghi tôi ra (tuyệt vời)

Khi tôi gọi mã tương tự khi sử dụng một tài khoản LIVE, Tôi nhận được một ngoại lệ không được chấp nhận - tôi thậm chí không thể thêm một try {} catch {} xung quanh lỗi này.

Ngoại lệ:

Cannot sign out from the application since the user account is connected. (Exception from HRESULT: 0x8086000E) 

Rõ ràng kể từ khi người dùng được đăng nhập dưới một tài khoản Live không thể đăng xuất, api của tôi cần phải phát hiện nếu người dùng hiện đang sử dụng một tài khoản trực tiếp để tôi có thể ngăn chặn gọi logout () phương pháp.

vì vậy .... Câu hỏi của tôi là, làm cách nào để biết loại tài khoản người dùng đã đăng nhập bằng Windows 8?

+0

Tại sao không thể bạn chỉ cần không đăng nhập người dùng ra khỏi tài khoản của họ? Cho phép họ quyết định. Kết quả của loginResult là gì. Tôi không tin rằng Microsoft sẽ phơi bày loại thông tin này nếu không nó sẽ dẫn đến phần mềm độc hại nhắm vào phiên Windows Live của bạn. –

+0

Khi bạn đăng nhập vào Windows 8 bằng tài khoản trực tiếp, bạn không thể 'đăng xuất' cho đến khi bạn chuyển sang tài khoản khác hoặc tài khoản cục bộ ... windows 8 giúp bạn đăng nhập vào mọi thứ. Tôi đồng ý, họ có thể không tiết lộ điều này, nhưng sau đó SDK đang ném một lỗi un-handleable ... vì vậy làm thế nào để ngăn chặn điều đó? –

Trả lời

5

Tìm thấy câu trả lời: http://msdn.microsoft.com/en-us/library/windows/apps/windows.security.authentication.onlineid.onlineidauthenticator.cansignout.aspx#Y0

Dưới đây là những tài sản mà chúng ta cần phải sử dụng:

Windows.Security.Authentication.OnlineId.OnlineAuthenticator.CanSignOut 

Mã số Ví dụ:

public async Task<bool> Logout() 
    { 
     // Check to see if the user can sign out (Live account or Local account) 
     var onlineIdAuthenticator = new OnlineIdAuthenticator(); 
     var serviceTicketRequest = new OnlineIdServiceTicketRequest("wl.basic", "DELEGATION"); 
     await onlineIdAuthenticator.AuthenticateUserAsync(serviceTicketRequest); 

     if (onlineIdAuthenticator.CanSignOut) 
     { 
      LiveAuthClient.Logout();    
     } 

     return true; 
    } 
Các vấn đề liên quan