2012-09-11 36 views
13

Trong ứng dụng của tôi, tôi đang sử dụng Forms-Authentication để đăng nhập và đăng xuất người dùng.Làm cách nào để buộc người dùng đăng xuất khi tên người dùng của họ bị người dùng khác thay đổi?

Một chức năng là quản trị viên có thể thay đổi tên người dùng của người dùng khác. Trong trường hợp đó, tôi cần đăng xuất người dùng có tên người dùng bị thay đổi.

Nếu không, do cookie được đặt trước đó, chúng có quyền truy cập vào ứng dụng và nhận thông báo lỗi (vì tên người dùng của chúng không tồn tại và có phần tôi sử dụng tên người dùng của chúng cho một số chức năng).

Làm cách nào để buộc những người dùng này đăng xuất bằng cách sử dụng Xác thực biểu mẫu?

UPDATE:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     string controller = filterContext.RouteData.Values["controller"].ToString(); 
     string action  = filterContext.RouteData.Values["action"].ToString(); ; 
     // Below returns the previous username, which does not exist anymore in db. 
     string userName = HttpContext.Current.User.Identity.Name; 

     UnitOfWork unitOfWork = new UnitOfWork(); 

     if (!unitOfWork.UserRepository.UserExists(userName)) 
     { 
      FormsAuthentication.SignOut(); 
      filterContext.HttpContext.Session.Clear(); 
      filterContext.HttpContext.Session.Abandon(); 
      // I am not using Roles. 


     } 
     unitOfWork.Dispose(); 
     base.OnActionExecuting(filterContext); 

    } 

Trong bộ lọc toàn cầu khách hàng của tôi, tôi kiểm tra xem có sử dụng hay không, nếu không tôi ký tên chúng ra. Tuy nhiên, nó không hoạt động. Bằng cách làm việc tôi có nghĩa là họ vượt qua xác thực và được truy cập vào ứng dụng.

Xin cảm ơn trước.

Trả lời

9

Dưới đây là những gì bạn làm để buộc người dùng đăng xuất khỏi:

public void UserPasswordChangedHandler() 
{ 
    FormsAuthentication.SignOut(); 
    Roles.DeleteCookie(); 
    Session.Clear(); 
} 

Tôi không nghĩ rằng từng dòng giải thích yêu cầu, tự mình giải thích đủ. Vui lòng cho tôi biết nếu tôi nhầm.

Cập nhật

câu trả lời thẳng thắn cho câu hỏi bổ sung của bạn là để giữ cho mỗi người dùng theo dõi boolean nếu dữ liệu của mình đã được cập nhật bởi admin và nếu có - chỉ cần chuyển hướng ông đến trang đăng nhập.

Xin vui lòng xem bài viết sau đây để buộc logout sử dụng các hình thức thông tin xác thực:

Cập nhật 2

Xoá cookie

Hy vọng điều này giúp bạn.

+2

tôi nghĩ rằng đây là dấu hiệu của người dùng đăng nhập. Tôi muốn đăng xuất những người dùng khác, mật khẩu của họ bị thay đổi bởi quản trị viên. Vâng, tôi chắc chắn có thể sử dụng mã này để ký rằng người dùng đăng xuất nhưng làm cách nào tôi có thể hiểu được, mật khẩu của họ có bị thay đổi không? nói cách khác khi phương pháp này nên được gọi? –

+0

Vui mừng mã tôi đã cung cấp là trợ giúp. Để trả lời câu hỏi bổ sung của bạn (cách xử lý), vui lòng xem cập nhật trong câu trả lời của tôi. –

+0

Xin cảm ơn một lần nữa. Tôi sử dụng mã của bạn trong bộ lọc ActionFilterAttribute tùy chỉnh của tôi. Ở đó, tôi kiểm tra xem tên người dùng có tồn tại hay không, nếu nó không (điều kiện này hài lòng khi tôi thay đổi tên người dùng của riêng mình), tôi đăng xuất người dùng. Tuy nhiên, vấn đề vẫn tồn tại. Cookie của người dùng vẫn tồn tại và anh ta có quyền truy cập vào ứng dụng. Bất kỳ ý tưởng? Tôi đã cập nhật câu hỏi của mình bằng mã bộ lọc. –

2

Khi người dùng cần bị vô hiệu, bạn phải thêm chi tiết của họ vào một số loại danh sách tĩnh nội bộ.

Sau đó, trên mọi yêu cầu trang (có thể sử dụng Application_BeginRequest) xem liệu người dùng hiện tại có nằm trong danh sách đó hay không và nếu có thì hãy gọi FormsAuthentication.SignOut tại đó và sau đó.

Dường như một chút hack, nhưng đó là điều tốt nhất tôi có thể nghĩ đến ngay bây giờ.

Lưu ý rằng việc xóa trạng thái phiên của người dùng vắng mặt là một vấn đề khác hoàn toàn.

+0

chúng tôi thực hiện một điều tương tự để ngăn nhiều người dùng đăng nhập từ các máy khác nhau, chúng tôi tạo mã thông báo (dựa trên thông tin người dùng máy tính) cho mỗi lần đăng nhập và sau đó kiểm tra xem mã thông báo có giống nhau không, nếu chúng tôi không đăng xuất –

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