简体   繁体   English

即使登录后,状态也会返回到上一页

[英]State routes back to previous page even after login

After refreshing the page, the state changes back to login . 刷新页面后,状态更改回login I am using $sessionStorage to store the data and I am able to print them successfully after login, but when I refresh the page, my page should stay on dashboard.html but routes to login state. 我正在使用$sessionStorage来存储数据,并且能够在登录后成功打印它们,但是当刷新页面时,我的页面应保留在dashboard.html上,但会路由至login状态。

angular.module('App', [
    'ngAnimate',
    'ngCookies',
    'ngResource',
    'ngSanitize',
    'ngAnimate',
    'ngTouch',
    'ui.bootstrap',
    'ui.router',
    'toaster',
    'ngStorage'
])
.config(function ($stateProvider, $urlRouterProvider) {

    $stateProvider
            .state('login', {
                url: '/login',
                templateUrl: "views/login.html"
            })
            .state('dashboard', {
                url: '/dashboard',
                templateUrl: "views/dashboard.html",
                required: true
            });

    $urlRouterProvider.otherwise('/login');

})
.run(["$rootScope", "$state", "$location", "authService", "$cookies", "$sessionStorage", function ($rootscope, $state, $location, authService, $cookies, $sessionStorage) {
        $rootscope.$on('$stateChangeStart', function (e, toState, toParams, fromState, fromParams) {

            if (toState.required && !$sessionStorage.authuserid) {
                alert("state not authenticated");
                e.preventDefault();
                $state.go('login');
            }
        });
    }]);

Here is my controller: 这是我的控制器:

angular.module('App')
.controller('loginController', ['$scope', '$http', '$timeout', '$location', '$rootScope', 'AUTHEVENTS', 'authService', '$cookies', '$state', 'userManagementFactory', '$localStorage', '$sessionStorage', function ($scope, $http, $timeout, $location, $rootScope, AUTHEVENTS, authService, $cookies, $state, userManagementFactory, $localStorage, $sessionStorage) {

    $scope.login = function () {

        authService.login(data).then(function (response) {
            $rootScope.$broadcast(AUTHEVENTS.loginSuccess);
            console.log("response data is: ", response);
            $sessionStorage.auth = response;
            $sessionStorage.authname = response.data.name;
            $sessionStorage.authrole = response.data.roles[0].name;
            $sessionStorage.authuserid = response.data.user_id;
            $sessionStorage.authprofilepic = response.data.profile_picture;

            if ($sessionStorage.authuserid) {
                $state.go('dashboard');
            } else {
                alert('user not authenticated');
            }

        }, function (error) {

            $scope.responseMessage = error.data.error;
            $rootScope.$broadcast(AUTHEVENTS.loginFailed);
        }
        )
    }
}])

Html: HTML:

<div ng-controller="loginController">
    <header class="main-header" ng-include src="'views/header.html'"></header><!--/main top header -->
    <div ui-view></div>
</div>

I am not sure what is causing it to change route on page refresh? 我不确定是什么原因导致它在页面刷新时更改了路由?

StateConfig doesnt seem to accept 'required' field, please refer https://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$stateProvider StateConfig似乎不接受“必填”字段,请参阅https://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$stateProvider

Instead you should have 相反,你应该有

.state('dashboard', {
                url: '/dashboard',
                templateUrl: "views/dashboard.html",
                data: {
                   required: true
                }
            });

and should check like this. 并应该像这样检查。

if (toState.data && toState.data.required && !$sessionStorage.authuserid) {

Try moving $urlRouterProvider.otherwise('/login'); 尝试移动$urlRouterProvider.otherwise('/login'); before 之前

      `$stateProvider
        .state('login', {
            url: '/login',
            templateUrl: "views/login.html"
        })
        .state('dashboard', {
            url: '/dashboard',
            templateUrl: "views/dashboard.html",
            required: true
        });`

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM