2012-10-08 2 views
0

나는 Unity3D 응용 프로그램을 호스팅하는 웹 역할이 있습니다. 응용 프로그램에는 연결 화면이 있습니다. 다른 연결 화면과 마찬가지로 로그인 및 암호를 입력하여 응용 프로그램의 핵심 (예 : 게임)에 액세스 할 수 있습니다.Windows Azure 데이터베이스 엔터티 프레임 워크 DbContext 및 MergeOptions

이러한 정보는 모두 Windows Azure Database에 저장되며 관리자 패널을 사용하여 사용자를 만들 수 있습니다. 이 패널은 다른 웹 역할에서 호스팅되며 데이터베이스에 액세스 할 수 있습니다.

새 사용자를 만들면 해당 응용 프로그램의 정보와 연결할 수 있습니다. 문제 없습니다. 하지만 지금은 관리자 패널을 사용하여 사용자 암호를 변경하려는 경우 데이터베이스에서 값이 잘 변경되지만 응용 프로그램에서는 새 암호로 연결할 수 없으므로 이전 암호가 항상 사용됩니다.

사용자 생성 및 비밀번호 변경은 Razor Entity Framework으로 완료됩니다.

Unity3D application에 웹 역할과 사용자 컨트롤러에 대한 요청을하고 역할이 이전 암호를 반환하고 새 암호를 반환하지 않기 때문에 이해가 가지 않습니다. 하지만 내 DB와 내 관리자 패널에 새로운 하나가 있습니다 ... 어떻게이 될 수 있습니까? 이 문제를 어떻게 해결할 수 있습니까?

응답 캐싱 문제가 있습니까?

내가 찾아 반환 사용 방법 : 다음

DatabaseContext db = DatabaseContextProvider.WebDatabase; 
string login = Request.Form["login"]; //The login typed by user 
var users = from u in db.Users where u.Login == login select u; 
User[] userArray = users.ToArray<User>(); 

난 당신이 내 문제를 해결하는 당신을 도울 수있는 정보가 필요하면 그냥 물어
Response.AddHeader("data", userArray[0].data.ToString());

같은 일부 헤더와 Unity3D에 대한 응답을 채우기 .

도움을 주셔서 감사합니다.

+0

귀하의 질문에 대해 더 자세히 설명해주십시오 (귀하가 편집 할 수 있음). 예를 들어 "암호 변경"방법이 명확하지 않은 경우, 응용 프로그램의 일부인 "관리자 패널"또는 Windows Azure 관리 포털은 어디에 있습니까?또한 SQL Azure DB에서 사용자를 생성하는 위치는 어디입니까? 그들은 SQL Azure 사용자입니까, 아니면 응용 프로그램 사용자입니까? 사용중인 Unity 응용 프로그램은 무엇입니까? Microsoft Ent.Lib. 화합 또는 다른 것? MS Ent.Lib 인 경우 Unity에 대한 캐싱을 구성 했습니까? – astaykov

+0

몇 가지 정보를 추가했습니다. 더 필요한 정보가 있으면 알려주십시오. – MaT

+0

암호를 변경하면 사용자의 ID가 그대로 유지되어야합니까? –

답변

1

,이 엔티티 프레임 워크에 의해 발생되었다
Entity Framework and DbContext - Object Tracking
http://msmvps.com/blogs/kevinmcneish/archive/2010/02/16/setting-entity-framework-mergeoptions-what-works-what-doesn-t.aspx

이제

DatabaseContext db = DatabaseContextProvider.WebDatabase; 
string login = Request.Form["login"]; 
var users = from u in db.Users where u.Login == login select u; 
User[] userArray = users.ToArray<User>(); 

DatabaseContext db = DatabaseContextProvider.WebDatabase; 
string login = Request.Form["login"]; 
ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext; 
ObjectSet<User> set = objectContext.CreateObjectSet<User>(); 
set.MergeOption = MergeOption.OverwriteChanges; 
var users = from u in set where u.Login == login select u; 
User[] userArray = users.ToArray<User>(); 
하기 전에

@Sandrino Di Mattia : 답변을 찾는 것을 도와 주셔서 감사합니다!

0

당신은 데이터베이스에 새 암호를 볼 수 있지만 컨트롤러는 이전 암호가 다음 ActionFilter를 생성하고 비밀번호 (as described here) 반환 액션에 추가하여 캐싱을 사용하지 않도록하려고 반환하는 경우 :

public class NoCacheAttribute : ActionFilterAttribute 
{ 
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
     filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false); 
     filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
     filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     filterContext.HttpContext.Response.Cache.SetNoStore(); 

     base.OnResultExecuting(filterContext); 
    } 
} 

을 그리고 옆에있는 이유는 무엇입니까? 사용자 이름/암호 유효성 검사는 서버 측에서 수행되어야하며 인증이 성공하면 true/false 또는 토큰을 반환해야합니다. 보안상의 관점에서 볼 때 패스워드를 반환하는 것은 좋은 생각이 아닙니다. 문제 발견

+0

불행히도, 작동하지 않는 것 같습니다. 나는 당신이 나를 위해 말한 것처럼 그것이 캐시 문제라고 이해하지 못하기 때문에 ... – MaT

+0

응답 헤더에는 no-cache, no-store, -1 등의 좋은 항목이 있습니다. 그러나 제공되는 해시는 DB에있는 것과 동일합니다. Btw 네 권리, 나는 신분 확인 절차를 바꿀거야. – MaT

+0

데이터를 가져올 때 작성중인 코드도 표시 할 수 있습니까? –

관련 문제