2011-05-06 5 views
3

내가 MVC 3 및있는 FormsAuthentication을 사용하고 있습니다에 대한 액세스 권한을 부여 할 수 없습니다 사용자를 인증하려면 계정/로그인에 게시하십시오.MVC 3 - -하고 FormsAuthentication 내 로그인 행동

[HttpPost] 
[Authorize(Users = "*")] 
public ActionResult Login(string userName, string password) { 
    ... 
} 

그리고 jQuery를하는 게시물 그것 : 여기 처리 내 AccountController 액션의

$.post("/account/login", { 
       "userName": $("#userName").val(), 
       "password": $("#password").val() 
      }, function (data) { 
...}); 

위의 모든 작품,하지만 지금은 사이트에 일반 액세스를 제한하려는, 그래서 추가 이 내 루트의 web.config는 :

:
<authorization> 
    <deny users="?" />  
</authorization> 

그리고 계정 컨트롤러에 대한 액세스를 허용하는 시도에

, 나는이 추가
<location path="~/Account"> 
<system.web> 
    <authorization> 
    <allow users="*"/> 
    </authorization> 
</system.web> 
</location> 

여기 내 문제는입니다. 로그인 페이지 (계정/색인)를 볼 수는 있지만 계정/로그인에 제출할 수 없습니다. 내가 피들러를 통해 무슨 일이 일어나고 있는지 볼 때, 그 페이지에 게시 할 때이 텍스트는 서버에서 반환받을 :

<html><head><title>Object moved</title></head><body> 
<h2>Object moved to <a href="/Account/?ReturnUrl=%2faccount%2flogin">here</a>.</h2> 
</body></html> 

내가 전체 권한이 부여 된 사용자 목록에 "~/계정"을 추가 할 때 '외설 것 같다 비 MVC 프로젝트에서와 같이 실제로 작동하지 않습니다. MVC 3에서 이것을 수행하는 특별한 방법이 있습니까?

답변

6

컨트롤러 경로는 일반적으로 상대 경로로 참조되지 않습니다. location = "Account"라고 말하면됩니다.

<location path="Account"> 

내가 지금 그것을 테스트 할 수 없습니다, 그러나이 될 수 있기 때문에 그 문제 확신 할 수 없습니다 ...

+1

고마워, 이것이 문제였다. 그것은 항상 간과하기에 너무 단순합니다. :) – bugfixr

2

로그인 작업에 AuthorizeAttribute을 전혀 사용하지 마십시오. 권한 부여 프로세스 자체에 권한 부여를 요구하는 것은 이치에 맞지 않습니다.

[Authorize] 
public class AuthorizeController : Controller 
{ 
} 

를 작성하고 AccountController 제외 해, 이것에서 모든 컨트롤러를 확장 할 수있는 모든 컨트롤러의 승인을 필요로합니다.

+1

이 너무 도움이되었습니다 - 첫째 나는 [권한 부여를하지 않았다에 ] 속성을 사용했지만, 필자는 그것을 수정하기 위해 어딘가에 추가했습니다. 위치 경로를 수정하고 [AUthorize]를 제거하면 잘 작동합니다. 두 가지 대답을 수락 할 수있는 방법이 있었으면 좋겠다. – bugfixr

관련 문제