2014-11-11 2 views
0

Iam이 $ $ timeout에 문제가 있습니다. 괜찮아요. F5를 누르지 않으면 페이지가 다시로드됩니다. 페이지를 다시로드하면 타임 아웃이 중지되고 타임 아웃에서 제공 한 기능을 호출하지 않습니다. 코드가 좋지만 뭔가 빠져있는 것 같아. 페이지를 새로 고침 할 때 시간 초과가 발생하지 않는 이유는 무엇입니까?

export class AccountController 
{ 

    constructor(private $scope: ControllerScope, private $location: ng.ILocationService, private AuthService: AuthService, private $timeout: ng.ITimeoutService) 
    { 

    } 

    public Login(model: LoginModel) 
    { 
     this.AuthService.login(model).then((response: any) => 
     { 
      //when token will expire -> logout 
      this.$timeout(() => 
      { 
       this.Logout(); 
      }, <number>response.TokenExpireTime).then((d) => 
      { 
       alert('Czas trwania sesji wygasł'); 
      }); 

      this.$location.path('/'); 
     }, 
     (err) => 
     { 
      alert(err.error_description); 
     }); 

    } 

    public Logout() 
    { 
      this.AuthService.logOut(); 
      this.$location.path("/login"); 
    } 

} 
+0

사용중인 구문에 익숙하지 않습니다.이 컴파일 된 자바 스크립트는 어떻게 든 사용하고 있습니까? – SoluableNonagon

+0

TypeScript처럼 보입니다. –

답변

1

글쎄, 당신은 사용자가 클릭 버튼에 로그인하면 LOGIN 만, 여기에 설명의 전화 가정.

$ timeout을 등록하면 브라우저를 새로 고침하면 제거됩니다. 이것은 표준 동작이며 브라우저 환경에서 모두 작동하는 방식입니다.

즉, 새 페이지 새로 고침에서 사용자가 이미 로그인 한 경우 더 이상 login 메서드를 호출하지 않습니다. 다시 한 번 $ 제한 시간을 등록하지 않으면 새로 고침 한 후 브라우저에서 사용하기를 원한다는 것을 알 수 있습니다.

한 가지 해결책은 모든 페이지로드시 $ timeout을 등록하도록 코드를 변경하는 것이지만 코드를 자세히 살펴보면 TokenExpireTime을 변수로 설정하여 localStorage 안에 넣고 다른 위치에서 사용할 수 있습니다.

localStorage [ 'expires']가 설정되어 있다고 가정합니다.

if (localStorage['expires']) { 
    $timeout(function() { 
     // do your thing, if you are not going to update model, keep 3rd parameter false, 
     // otherwise skip it to prevent $digest cycle from running 
    }, localStorage['expires'], false); 
} 

이것은 무엇을하고 있든 15 분 후에 로그 아웃하는 은행 세션과 유사합니다.

사용자가 다른 페이지로 이동하거나 앱과 상호 작용할 때 제한 시간을 재설정하려면 해당 로직을 약간 더 고급화해야합니다. 초점 이벤트.

$(window).on('focusin', function() { 
    // clear timeout, user is back in your app 
}); 

$(window).on('focusout', function() { 
    // register timeout, user is away 
}); 
+0

저는 은행과 비슷한 funcitonality를 원합니다. 어디에서 타임 아웃 기능을 설정해야합니까? 내가 설정 한 곳이라면 어쨌든 재설정 될 것입니다. – user2279379

+1

어디서나. 코드가 모든로드에서 호출되는지 확인하십시오. $ timeout보다 위에 console.log를 삽입하여 매번 프로그램이 해당 라인에 도달하는지 확인하십시오. –

+0

그래도 타이머는 항상 자체적으로 재설정되며 페이지를 새로 고침 할 때마다 시작부터 계산됩니다. – user2279379

관련 문제