2010-07-09 4 views
3

누군가가이 문제에 대한 해결책을 도울 수 있기를 바랍니다.어떻게 여러 언어에 대한 ASP.Net 폼 인증 longinUrl을 세계화합니까?

<authentication mode="Forms"> 
    <forms loginUrl="en/User/Signin" timeout="2880" /> 
</authentication> 

우리의 식별자로 URL의 접두사/EN /을 사용하는 일부 라우팅 규칙이 있습니다

현재 내 ASP.Net MVC 웹 사이트는 폼 인증이 내 Web.config를 같이 설정되어 사용 그러나 문제는 누군가가 우리의 프랑스어 사이트 인 www.web.com/fr/Secure/privateData를 방문하면 www.web.com/en/User/Signin으로 리디렉션되어 문화를 영어. 따라서 로그인 한 후 언어를 프랑스어로 다시 변경해야 할 수 있습니다.

좋지 않습니다!

<authentication mode="Forms"> 
    <%if (isGerman()) { %> 
     <forms loginUrl="de/User/Signin" timeout="2880" /> 
    <%} else if (isFrench()) {%> 
     <forms loginUrl="fr/User/Signin" timeout="2880" /> 
    <%} else { %> 
     <forms loginUrl="en/User/Signin" timeout="2880" /> 
    <% } %> 
</authentication> 

난 당신이 Web.config의 코드를 가질 수 없습니다 알지만, 이것이다 : 웹 사이트가 더 많은 언어를 suppurt해야하는, 그래서 웹 설정에서 이런 일을 할 필요가 그래서 경우

내가 성취하려는 것을 설명하기 위해서입니다. 누구나 간단한 솔루션을 제공하거나 이미 사용하고있는 솔루션에 대한 링크를 제공 할 수 있습니까?

고마워요!

+0

답변 주셔서 감사합니다 jim과 gertjan. 나는 일종의 해킹을 해킹해야 할 것 같아 보인다. 답장을 줬어. –

답변

1

로그인 페이지 하나를 세계화하고 언어 설정에 따라 언어 문자열을 표시 할 수 없습니까?

그렇지 않으면 어떤 종류의 리디렉션을 사용해야하며 한 페이지를 설정하고 해당 페이지의 언어 설정에 따라 올바른 페이지로 리디렉션해야합니다. 그러나 로그인 모드가 인증 모드 내에서 보호되지 않는다는 것을 시스템에 알려주는 추가 코드를 추가해야 할 수도 있습니다 (web.config에서 사이트의 특정 부분에 대한 설정을 제외/변경할 수 있음). 루핑.

+0

감사합니다. 우리가 생각한 몇 가지 해결책이 있습니다. 쿠키 나 세션에 언어를 넣으십시오. 내가 생각할 수있는 수많은 "해킹"이 있지만 양식 인증으로이를 수행하는 적절한 방법이 있습니까? –

+0

나는 인증이 세계화를 처리 할 수있을 것이라고 생각하지 않는다. 인증 부분은 누군가가 인증되었는지 여부를 확인하고 그러한 상황을 처리 할 책임이 있습니다. 그 과정은 어떤 세계화에 대해서도 알지 못합니다. 로그인 할 때 사용하는 페이지에 세계화를 넣어야한다고 생각합니다. – Gertjan

+0

감사합니다. Gertjan 님, 이렇게 생각합니다. –

1

다이,

나는 매우 비슷한 일을하고 올바른 로그인의 언어를 설정하는 basecontroller 있습니다. 지금 당장 손에 코드를 해달라고하지만의 라인을 따라 뭔가 :

public string Lang { get; private set; } // at the top of the abstact basecontroller 

    protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
    { 
     Lang = requestContext.RouteData.Values["lang"].ToString() ?? System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName; 
     ViewData["Lang"] = Lang; 

     base.Initialize(requestContext); 
    } 

필요에 따라 그때 경로에 LANG 변수를 연결합니다. 내가 사용하는 코드를 파고들 수 있는지를 보 겠지만, 위의 코드가 머리를 감싸기에 충분할 것입니다.

+0

Yip, tmpdata 또는 이와 유사한 것으로 언어 코드를 유지하는 것처럼 "해킹"에 대해 생각해 왔습니다. 나는 당신이 다음과 같이 조작 할 수있는 객체 속성이 있기를 바랬다 : controller.httpContext.formsAuthenticationObject.loginurl? –