Reputation: 475
I have a very basic login service, no real authentication, but when if i redirect with a page refresh using $window.location.href the data is lost. When the user gets 'logged in' and the page is redirected to the homepage, instead its resolves as loggedIn = false and redirects back to the login page.
How can i prevent this from happening?
Code snippets:
LoginController
ApiService.getUser($scope.user)
.success(function (data) {
UserService.user = data;
UserService.isLogged = true;
$window.location.href = '/';
})
UserService
return {
user: {},
isLogged: false
};
RequireLoginService
return {
loginRequired: function () {
var deferred = $q.defer();
if (!UserService.isLogged) {
deferred.reject();
$location.path('/login');
} else {
deferred.resolve()
}
return deferred.promise;
}
}
app module
$routeProvider
.when('/', {
templateUrl: 'views/sheet.html',
controller: 'SheetCtrl',
resolve: {
loginRequired: function(RequireLoginService) {
return RequireLoginService.loginRequired();
}
}
})
Upvotes: 0
Views: 1571
Reputation: 2715
Store the user data in Local Storage and populate the input fields with that data if it's available. A useful object for storage data in Local Storage:
var LocalStorageManager = {
setValue: function(key, value) {
window.localStorage.setItem(key, JSON.stringify(value));
},
getValue: function(key) {
try {
return JSON.parse(window.localStorage.getItem(key));
} catch (e) {
}
}
};
To store data:
LocalStorageManager.setValue("key",data);
To retrieve that data:
LocalStorageManager.getValue("key");
Upvotes: 0
Reputation: 475
Thinking in another perspective made me find an answer. I just needed to put a watch on the controller that needs the data 'refreshed' instead of trying to refresh the page as a whole.
As follows:
$scope.$watch(function () { return UserService.user.username; }, function (value) {
$scope.user = value;
});
Cheers.
Upvotes: -1