로그인, 등록, 서버에서 사용자 데이터 가져 오기 등과 같은 모든 인증 문제를 처리하는 데 도움이되는 AuthService를 만들었습니다.
로그인, 페이지 새로 고침 및 새로 고침이 트리거되면 서비스에서 사용자 데이터를 가져와 서비스를 포함하는 컨트롤러에서 사용할 수 있도록하는 솔루션을 찾고 있습니다. vm.user = AuthService.getUserData ()와 같은 것을 갖고 싶습니다. 그러면 서비스에서 세션 변수가 반환됩니다. 이 같은:
function getUserData(){
if (session) {
return session.user;
}
return null;
}
$ rootScope. $ on ( '$ stateChangeStart'에 다음이 있습니다.
AuthService.loadSessionData();
다음으로 번역됩니다.
function loadSessionData() {
$http({
url: API.URL+'auth/session-data',
method: 'GET'
})
.success(function(response)
{
session = response;
})
.error(function(err){
console.log(err);
});
};
여기서 문제 중 하나는 AuthService.getUserData ()에 시간 제한을 설정해야한다는 것입니다. 이것이 실행될 때 서버에서 세션 데이터를 검색하는 호출이 아직 완료되지 않았기 때문에 이것은 나쁜 습관입니다.
다음은 완전한 서비스 코드입니다. http://pastebin.com/QpHrKJmb
해결을 사용하는 것은 어떻습니까? 내가 올바르게 이해했다면 어쨌든이 데이터를 컨트롤러에 저장하고 싶습니다.
이것을 상태 정의에 추가 할 수 있습니다.
.state ( 'bla', { 템플릿 : '...' 컨트롤러 : 'BlaCtrl', 해결 : { 사용자 : [ 'AuthService', function (AuthService) { return AuthService.loadSessionData (); } } }
또한 loadSessionData 함수를 변경하십시오. ($ q를 AuthService 에 주입해야합니다 )
function loadSessionData () { return $ q (function (resolve, reject) { $ http ({ url : API.URL + 'auth / session-data', method : 'GET' }) .success (function (response) { if (응답) { resolve (response); } else { reject (); } }) .error (function (err) { reject (err); }); }) }
마지막으로 resolve 함수 의 사용자 개체를 컨트롤러에 추가합니다 .
app.contoller ( 'BlaCtrl', [ '$ scope', 'user', function ($ scope, user) { $ scope.user = user; }]);
이것은 무엇을 성취합니까?
사용자에게 유효한 세션이 없거나 오류가 발생하면 상태 변경이 거부되고 $ stateChangeError 이벤트 가 발생합니다. 해당 이벤트에 대해 $ stateChangeStart에 대해 했던 것처럼 수신 하고 모달로 응답하거나 오류 페이지로 리디렉션하는 등의 작업을 수행 할 수 있습니다.
모든 상태 변경이 아닌 필요한 상태에 대해서만 세션을 가져옵니다.
상태는 사용자 데이터도 해결 될 때까지 (해결 또는 거부에 의해) 해결되지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다