2012-09-06 2 views
1

현재 내 자신의 사용자 지정 멤버 자격 공급자를 구현했으며 현재 ValidateUser() 만 덮어 씁니다. 나는 또한 signalr을 사용하고있다. 현재 메시지를 보내고 모든 리스너에게 보내는 단순한 메소드이다. 이 명령을 독자적으로 실행할 수 없도록 몇 가지 유효성 검사를 추가하고 싶습니다. 지금까지 당신이 사용을 할 수 발견 : 나는 현재 사용자 지정 멤버 자격 공급자의 값이 false 사용하고 있기 때문에 내 문제는 생각입니다사용자 지정 멤버 자격 공급자를 사용하는 신호음자

[HubName("messageController")] 
public class MessageController : Hub 
{ 
    public void SendMessage(string message) 
    { 
     if (Context.User.Identity.IsAuthenticated)  // this line not working 
     { 
      Clients.addMessage(message); 
     } 
     else 
     { 
      Clients.addMessage("not authenticated"); 
     } 
    } 
} 

Context.User.Identity.IsAuthenticated. 대신 여기에서 사용해야하는 다른 것이 있습니까? 내가 여기서 무엇을

[AllowAnonymous] 
    [HttpPost] 
    public ActionResult Login(LoginModel model, string returnUrl) 
    { 
     if(Membership.ValidateUser(model.UserName, model.Password)) 
     { 
      // Need something here to actually set the logged in user 
     } 
     return RedirectToAction("Index", ""); 
    } 

을 잃었 :

현재 내가 실행 로그인 할 때? 세션을 처리하기 위해 자신의 코드를 저장해야합니까? FormsAuthentication.SetAuthCookie(model.UserName, true);을 사용해 보았습니다.하지만 그 오류는 확실합니다. 역할을 Context.User.IsInRole("Admin")으로 변경하여 역할을 도입하려고 시도했을 때 false를 반환했습니다. 나는 (절대 디버깅 없을 때이 방법에 도달) 아래의 사용자 모델을 사용하더라도 :

public class User : IPrincipal 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 


    public long UserID; 
    public string Name; 
    public string ConnectionId; 

    public virtual IIdentity Identity 
    { 
     get; 
     set; 
    } 

    public virtual bool IsInRole(string role) 
    { 
     return true; 
    } 

}

을 나는, 어떤 아이디어를이 뭔가를 놓친 거지 꽤 확신?

답변

3

사용자가 확인한 후 FormsAuthentication.SetAuthCookie()을 사용하면 MVC3 템플릿에서 생성 한 기본값 인 AccountController이 완전히 동일합니다. 즉, 사용자 정의 User 클래스 (프레임 워크가 그것에 대해 알고하지 않습니다)를 호출하지 않습니다 대신이 RoleProvider를 통해 역할을 얻으려고하기 때문에

Context.User.IsInRole()에 전화가 작동하지 않는 이유입니다. 사용자 지정 공급자를 빌드하고 멤버 자격 공급자와 마찬가지로 Web.config에 연결해야합니다.

+0

감사합니다. 완벽하게 작동했습니다. 나는이 주석을보기 전에 실제로 구현했지만 감사합니다. 혼란스러운 점은 Context.User.IsInRole()을 호출 할 때'RoleProvider.GetRolesForUser'를 호출 할 때'RoleProvider.IsUserInRole()'이 호출되지 않는다는 것입니다. – user1434177

관련 문제