現在、$rootScope
を使用してユーザー情報を保存しているかどうか、またユーザーがログインしているかどうかを確認しています。$window.localStorage
を使用しようとしましたが、私の目標は、ユーザーがログインした後、ナビゲーションバーにアイテムを表示したり、ユーザー名をナビゲーションバーに表示させたり、個々のユーザープロファイルビュー、すべてのユーザービューなどを表示させることです。永続的なログインが必要です。私は$rootscope
と一緒に働くnavbarを持っていますが、私が試して$window.localStorage
に移行しようとすると失敗します。ここで$rootScope
を使用したコードは次のとおりです。ローカルストレージを使用してAngularJSデータを保存する
mainModule
angular.module('mainModule', [
'ui.router',
...
])
.config(configFunction)
.run(['$rootScope', '$state', 'Auth', function($rootScope, $state, Auth) {
$rootScope.$on('$stateChangeStart', function(event, next) {
if (next.requireAuth && !Auth.getAuthStatus()) {
console.log('DENY');
event.preventDefault();
$state.go('login');
} else if (Auth.getAuthStatus() || !Auth.getAuthStatus()) {
console.log('ALLOW');
}
});
}]);
認証工場
angular.module('authModule').factory('Auth', ['$http', '$state', function authFactory($http, $state) {
var factory = {};
var loggedIn = false;
var userData = {};
factory.getAuthStatus = function() {
$http.get('/api/v1/auth')
.success(function(data) {
if (data.status == true) {
loggedIn = true;
} else {
loggedIn = false;
}
})
.error(function(error) {
console.log(error);
loggedIn = false;
});
return loggedIn;
}
return factory;
}]);
ログインコントローラ
function SigninController($scope, $rootScope, $http, $state) {
$scope.userData = {};
$scope.loginUser = function() {
$http.post('api/v1/login', $scope.userData)
.success((data) => {
$scope.userData = data.data;
$rootScope.loggedIn = true;
$rootScope.userData = data;
$state.go('home');
})
.error((error) => {
console.log('Error: ' + error);
});
};
}
ここでは
ナビゲーションコントローラ
function NavbarController($scope, Auth) {
$scope.loggedIn = Auth.getAuthStatus();
}
EDIT編集編集
は、私は、ローカルストレージを使用しています方法です。これらは変更された唯一のものです。
ログインコントローラ
function SigninController($scope, $window, $http, $state) {
$scope.userData = {};
$scope.loginUser = function() {
$http.post('api/v1/login', $scope.userData)
.success((data) => {
$scope.userData = data.data;
$window.localStorage.setItem('userData', angular.toJson(data));
$window.localStorage.setItem('loggedIn', true);
$state.go('home');
})
.error((error) => {
console.log('Error: ' + error);
});
};
}
認証工場
angular
.module('authModule')
.factory('Auth', ['$http', '$window', '$state', function authFactory($http, $window, $state) {
var factory = {};
factory.getAuthStatus = function() {
$http.get('/api/v1/auth')
.success(function(data) {
if (data.status == true) {
$window.localStorage.setItem('loggedIn', true);
} else {
$window.localStorage.setItem('loggedIn', false);
}
})
.error(function(error) {
console.log(error);
$window.localStorage.setItem('loggedIn', false);
});
return $window.localStorage.getItem('loggedIn');
}
return factory;
}]);
動作していない試行を表示できますか?また、$ window.localStorageではなく、localStorageを使用してください。また、localStorageには文字列しか格納されていないので、JSON.stringify()とJSON.parse()を使用してlocalStorageにオブジェクトを格納/取得することをお勧めします。 – holtc
@holtcはい、数分間お待ちください!ありがとうございました! – 2b2a
@holtcアップです! $ window.localStorageを使用しない理由について説明してください。私の例ではこれが使用されている。 – 2b2a