2013-08-31 1 views
0

좋아, 오후에 배수구 아래로, 나는 SO 도움을 인정합니다. 내 로그인 방법은 꽤 표준 적입니다. 아래에 표시된 것처럼 WebSecurity.Login을 사용하고 있습니다.MVC4 WebSecurity.Login 처음 실패, 로그인 방법에서 사용자를 얻을 수 없습니다

바로 그 후 사용자 프로필이 완료되었는지 확인하고 그렇지 않은 경우 해당보기로 보내고 싶습니다.

컨트롤러 내가 무리가 .... 내가 인상했다 WebSecurity.Login 후 WebSecurity 사용자 데이터 세트 얻을 것이다 그것을 통해 강화했습니다

[AllowAnonymous] 
[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Login(LoginModel model, string returnUrl) 
{ 
    if (ModelState.IsValid && WebSecurity.Login(model.Email, model.Password, persistCookie: model.RememberMe)) 
    { 

     if (!User.IsInRole("User")) 
     { 
      if (!IsProfileComplete(WebSecurity.GetUserId(User.Identity.Name))) 
      { 
       return RedirectToAction("ProfileCompletion"); 
      } 

      if(!User.IsInRole("User")) Roles.AddUserToRole(User.Identity.Name, "Vendor"); 
     } 
     else // user has role 
     { 
      return RedirectToAction("Index", "Dashboard"); 
     } 
    } 

    ModelState.AddModelError("", "Unknown username or password."); 
    return View(model); 
} 

하지만 WebSecurity.GetUserId (User.Identity .NAME)는 사용자 ID -1

에 대한 프로필을 찾기 위해 노력하고 있기 때문에 프로파일 완료로 리디렉션됩니다 다시 -1 사용자가 프로필을 완료하더라도

, 오는 뭔가가 있나요 http 게시 및 로그인 컨텍스트에 대해 내가 누락 된 설정? 내가 찾고있는 최종 결과는 사용자가 시스템에 들어가기 전에 프로필 페이지를 완료했는지 확인하는 것입니다. 어쩌면 더 좋은 방법이 있을까요?

편집 -----

이 링크를 찾았지만 사람이 이후로 내 원하는 기능

MVC 4 SimpleMembership - Why WebSecurity.CurrentUserId -1 after login

답변

1

더 나은 패턴을 제안 할 수 있다면 난 여전히 빠른 의견을 주셔서 감사합니다 거라고 발견 한 바로는 사용자 ID가 로그인 직후 설정되어 있지 않으므로 User.Identity.Name에는 사용자 이름이 포함되어 있지 않습니다. 대신 model.UserName을 사용하십시오. 이에

if (!IsProfileComplete(WebSecurity.GetUserId(User.Identity.Name))) 

:

if (!IsProfileComplete(WebSecurity.GetUserId(model.UserName))) 
이 줄을 변경해보십시오