2010-05-30 6 views
0

나는했습니다 설정을 IIS 내가 가상 디렉터리 만든 .NET 4.는 가상 디렉터리/응용 프로그램 및 폼 인증

를 사용하여 회원과 함께 간단한 폼 인증 웹 사이트를 구축 IIS7에서 (지금 변환을 "응용 프로그램"에) 및 설정은 가상 디렉터리에서 web.config 파일은 다음과 같이

<configuration>
<system.web>
<authorization>
<deny users="?">
</authorization>
</system.web>
<system.webServer>
<directoryBrowse enabled="true" />
</system.webServer>
</configuration>

좋아!

../mydomain/books/ 다음과 같이 나는 자동으로 내 루트 디렉토리에 web.config에 의해 지정된 로그인 페이지로 이동하고있어 URL 경로가 배치됩니다 : 나는 가상 디렉터리로 이동

../Account/Login.aspx?ReturnUrl=%2fbooks

이 시점에서 성공적으로 로그인했지만 어디에도 리디렉션되지 않았으며 수동으로 디렉토리 ../books으로 돌아 가면 이미 로그인 한 로그인 페이지로 다시 전송됩니까?

그래서 내 문제가 무엇인지 혼란스러워합니다! 나는 성공적으로 인증을 받아야하고, 디렉토리로 다시 리다이렉트되거나, 적어도 로그인 한 후에 수동으로 볼 수 있어야한다.

+0

을 했나 :

[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { /* do your authentication here connect to user store get user identity validate your user etc */ if (user != null) { await SignInAsync(user, model.RememberMe); FormsAuthentication.SetAuthCookie(model.Email, model.RememberMe); System.Web.HttpCookie MyCookie = System.Web.Security.FormsAuthentication.GetAuthCookie(User.Identity.Name.ToString(), false); MyCookie.Domain = "your_domain.com"; Response.AppendCookie(MyCookie); if (Url.IsLocalUrl(returnUrl)) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Home"); } } else { ModelState.AddModelError("", "Invalid username or password."); } } // If we got this far, something failed, redisplay form return View(model); } 

마지막으로, MVC AccountController이 방법을 로그 오프하는 것은 이것이다 이 문제가 해결 되나요? 나는 똑같은 문제를 겪고있다. –

+0

아니요 불행히도 MVC의 기본 양식 인증을 사용하지 않았지만 너무 빨리 기대하고 있습니다.이 문제가 다시 발생하면이 게시물로 돌아갑니다. –

답변

0

로그인 한 후 로그인 페이지 내에서 쿼리 문자열에 표시된 "ReturnUrl"URL로 리디렉션 할 코드를 추가해야합니다.

1

나는이 문제를 직접 해결해야했기 때문에 검색 결과를 여기에 표시 할 경우 다른 사람들을 위해 게시 할 수 있다고 생각했습니다.

양식 인증을 사용하고 익명 사용자에게 서식을 허용하고 기존 .Net (.aspx) 웹 사이트와 MVC 웹 응용 프로그램간에 자격 증명을 전달하고 지정된 URL로 리디렉션하는 데 필요한 모든 것입니다. 로그인 후.

찾고있는 모든 것을 사용하십시오.

.Net 웹 응용 프로그램 (.aspx)의 가상 디렉터리/가상 응용 프로그램 경로가 Views 디렉터리 외부에 있는지 확인하십시오. 또한 IIS에서 가상 디렉터리/응용 프로그램을 설정했는지 확인하십시오.

사용자를 확인하기 위해 SQL Server 데이터베이스에 Entity Framework 및 ID를 사용했습니다. 당신이 뭔가를해야합니다 당신의 login.aspx 페이지 뒤에 코드에서, 그리고

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 

    <!-- other stuff --> 

    <system.web> 
     <authentication mode="Forms"> 
      <forms 
       loginUrl="login.aspx" 
       name=".AUTHCOOKIE" 
       protection="All" 
       path="/" 
       domain="your_domain.com" 
       enableCrossAppRedirects="true" 
       timeout="60"> 
      </forms> 
     </authentication> 

     <authorization> 
      <deny users="?" /> 
      <allow users="*" /> 
     </authorization> 

     <machineKey 
      validationKey="your validation key" 
      decryptionKey="your decryption key" 
      validation="SHA1" 
      decryption="AES" 
     /> 

     <!-- other stuff --> 

    </system.web> 

    <location path="/path/to/your/site.css"> 
     <system.web> 
      <authorization> 
       <allow users="?"></allow> 
      </authorization> 
     </system.web> 
    </location> 

    <!-- other stuff --> 

</configuration> 

:

가상 응용 프로그램/디렉토리 닷넷 (.ASPX) web.config 파일이를 포함 할 필요가있다 :

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    string username = Login1.UserName; 
    string pwd = Login1.Password; 

    /* do your authentication here 
     connect to user store 
     get user identity 
     validate your user 
     etc 
    */ 
    if (user != null) 
    { 
     FormsAuthentication.SetAuthCookie(username, Login1.RememberMeSet); 
     System.Web.HttpCookie MyCookie = System.Web.Security.FormsAuthentication.GetAuthCookie(User.Identity.Name.ToString(), false); 
     MyCookie.Domain = "your_domain.com"; 
     Response.AppendCookie(MyCookie); 
     Response.Redirect("~/path/to/your/index.aspx"); 
    } 
    else 
    { 
     StatusText.Text = "Invalid username or password."; 
     LoginStatus.Visible = true; 
    } 
} 

이제 MVC 응용 프로그램 웹에 있습니다.설정 파일이 추가

<configuration> 

    <!-- other stuff --> 

    <system.web> 
     <authentication mode="Forms"> 
      <forms 
       loginUrl="Account/Login" 
       name=".AUTHCOOKIE" 
       protection="All" 
       path="/" 
       domain="your_domain.com" 
       enableCrossAppRedirects="true" 
       timeout="30"/> 
     </authentication> 

     <authorization> 
      <deny users="?"/> 
      <allow users="*"/> 
     </authorization> 

     <machineKey 
      validationKey="your validation key" 
      decryptionKey="your decryption key" 
      validation="SHA1" 
      decryption="AES" 
     /> 

     <!-- other stuff --> 

    </system.web> 

    <location path="/path/to/your/site.css"> 
     <system.web> 
      <authorization> 
       <allow users="?"></allow> 
      </authorization> 
     </system.web> 
    </location> 

    <!-- other stuff --> 

    <system.webServer> 
     <modules runAllManagedModulesForAllRequests="true"> 
      <remove name="FormsAuthenticationModule"/> 
      <add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule"/> 
      <remove name="UrlAuthorization"/> 
      <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"/> 
     </modules> 
    </system.webServer> 

    <!-- other stuff --> 

</configuration> 

당신의 MVC AccountController 로그인 방법은 다음과 비슷한 모습이 될 것입니다

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult LogOff() 
{ 
    AuthenticationManager.SignOut(); 
    FormsAuthentication.SignOut(); 
    return RedirectToAction("Login", "Account"); 
}