Angularjs ui 路由器。如何重定向到登录页面

2024-06-24

我有4个状态:仪表板, 仪表板.main, 仪表板.次要, login。 仪表板是抽象的,它是 .minor 和 .main 状态的父状态。 下面是我的代码:

.state('dashboard', {
        url: "/dashboard",
        abstract: true,
        templateUrl: "views/dashboard.html",
        resolve: {
            auth: function ($q, authenticationSvc) {
                var userInfo = authenticationSvc.getUserInfo();
                if (userInfo) {
                    return $q.when(userInfo);
                } else {
                    return $q.reject({ authenticated: false });
                }
            }
        },
        controller: "DashboardCtrl",
        data: { pageTitle: 'Example view' }
    })
    .state('dashboard.main', {
        url: "",
        templateUrl: "views/main.html",
        controller: "DashboardCtrl",
        data: { pageTitle: 'Main view' }
    })

正如您在仪表板状态中看到的,我有解决选项。通过此,如果用户未获得授权,我想将用户重定向到登录页面。为此我使用特殊的认证服务服务:

.factory("authenticationSvc", ["$http", "$q", "$window", function ($http, $q, $window) {
    var userInfo;

    function login(email, password) {
        var deferred = $q.defer();

        $http.post("/api/login", { email: email, password: password })
            .then(function (result) {
                if(result.data.error == 0) {
                    userInfo = {
                        accessToken: result.data.accessToken
                    };
                    $window.sessionStorage["userInfo"] = JSON.stringify(userInfo);
                    deferred.resolve(userInfo);
                }
                else {
                    deferred.reject(error);
                }
            }, function (error) {
                deferred.reject(error);
            });

        return deferred.promise;
    }
    function getUserInfo() {
        return userInfo;
    }
    return {
        login: login,
        logout: logout,
        getUserInfo: getUserInfo
    };
}]);

我检查身份验证值config :

.run(function($rootScope, $location, $state) {
    $rootScope.$state = $state;
    $rootScope.$on("routeChangeSuccess", function(userInfo) {
        consol.log(userInfo);
    });
    $rootScope.$on("routeChangeError", function(event, current, previous, eventObj) {
        if(eventObj.authenticated === false) {
            $state.go('login');
        }
    });
});

但不幸的是,当我进入网站根目录或仪表板状态时,我得到一个空页面。这段代码有什么问题?谢谢!


重点是,如果不需要就不要重定向===如果已经重定向到预期状态。有一个工作的笨蛋 http://plnkr.co/edit/3kImqU?p=preview具有类似的解决方案

.run(function($rootScope, $location, $state, authenticationSvc) {


    $rootScope.$on( '$stateChangeStart', function(e, toState  , toParams
                                                   , fromState, fromParams) {

        var isLogin = toState.name === "login";
        if(isLogin){
           return; // no need to redirect 
        }

        // now, redirect only not authenticated

        var userInfo = authenticationSvc.getUserInfo();

        if(userInfo.authenticated === false) {
            e.preventDefault(); // stop current execution
            $state.go('login'); // go to login
        }
    });
});

检查这些以获取类似的解释:

  • Angular ui 路由器 - 重定向根本不起作用 https://stackoverflow.com/q/26135382/1679310
  • 如何修复“超出最大调用堆栈大小”AngularJS https://stackoverflow.com/q/25028597/1679310
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angularjs ui 路由器。如何重定向到登录页面 的相关文章

随机推荐

  • java中的配置文件

    我创建了一个 Swing 应用程序 GUI 其中包含文本字段 标签 复选框和组合框等字段 当用户输入一些信息时 我希望将文本字段 组合框和复选框的详细信息保存到文件中 并且下次用户打开此窗口时 我希望将已保存在文件中的详细信息 即那些用户上
  • 使用单引号和双引号对 XPath 表达式进行编码

    XPath v1 不包含对表达式进行编码的方法 如果只有单引号或双引号 则可以使用诸如 review name Bob s Pizza review name Pizza Pam 但是如果你两者都有 例如 Fred s Fancy Pizz
  • React NotFoundError:无法在“Node”上执行“insertBefore”:要插入新节点的节点不是该节点的子节点

    当我在 React 中内置的 Aframe 资产管理器中更新新资产时 出现此 notFound 错误 资产管理器组件的构建如下 export class Assets extends PureComponent render const h
  • OS 和 SYS 等容易混淆的 Python 类的命名背后的原因是什么?

    我注意到 SO 中与 Python 相关的大量问题都是关于人们搞乱 Sys 类 操作系统类和无类 例如 一个容易混淆的情况是 os open something open something and sys open something 我
  • 是否可以手动更新 ModelState.IsValid ?

    我想尽可能使用内置的验证功能 我还想对 CRUD 方法使用相同的模型 但是 由于无法使用标准模式完成下拉列表 因此我必须手动验证它 在回发方法中 我只想验证下拉列表并将此结果添加到 ModelState 中 这样我就不必验证使用数据注释完成
  • 如何在 Visual Studio 2022 中的 ASP.NET Core 5 项目上禁用 SSL?

    如何在 Visual Studio 2022 中的 ASP NET Core 5 项目上禁用 SSL 在 Startup cs 中尝试删除 app UseHttpsRedirection 来自家庭控制器内的索引方法 需要https
  • 浏览器何时自动清除外部 JavaScript 文件的缓存?

    我有一个可以随时编辑的 JavaScript 资源 一旦编辑完成 我希望它能够相对较快地传播到用户的浏览器 例如可能 15 分钟左右 但是 编辑此资源的频率很少 可能每月 2 次 我宁愿将资源缓存在浏览器中 因为它将被频繁检索 但我也希望缓
  • 使用Anaconda Distribution,如何使用散景绘图?

    维护者注意 这个问题涉及过时的第一代 Bokeh 服务器 有关现代 Bokeh 服务器应用程序的详细信息 请参阅 https docs bokeh org en latest docs user guide server html http
  • Android 3D按钮文本位置

    如何更改不同按钮状态的文本位置 在图像上您可以看到它现在的样子 drawable
  • 有人有 EPiServer 考试技巧吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我本人和一些同事刚刚被告知我们将于周五参加 EPiServer CMS 认证考试 在网上做了一些研究后 这听起来确实是一项具有挑战性的考试
  • 在编译时初始化静态数组时,g++ (4.7.2) 错误或功能?

    好吧 所以我试图通过初始化一堆来做一些聪明的事情constexpr static int const编译时的数组 尽管运行时性能根本不受初始化这些数组的控制 但这似乎是一个有趣的小练习 我写了一个测试设置来看看是否可行 最终我能够做到这一点
  • NX MFE 角度模块联盟无法访问远程微前端

    我有一个 shell 和两个使用 NX 模块联合的 MFE 即 机构 a and home b 它托管在不同的子域中 我在尝试访问时遇到问题 My 模块联合 manifest json agency https a abc maindoma
  • 使用 rvest 添加新字段到表单

    我正在尝试使用 rvest 下载 完整的 动态扩展的 控股 表 但我得到了一个Unknown field names error s lt html session http innovatoretfs com etf ticker fft
  • 设置具有标题和详细信息区域的 jasper 子报表的边框

    我正在开发一个 grails 项目 该项目使用 jasper 插件下载 pdf 和 doc 格式的文档 我有几个 jasper 子报告 并在动态 jasper 中使用这些子报告来下载 pdf 和 docx 格式的文档 我使用动态 jaspe
  • 使用 Android NDK 构建 Soundtouch

    我正在尝试在我的 Android 项目中导入 Soundtouch 库 但我不是本机代码高级用户 所以这可能就是为什么我在理解构建方式时遇到一些问题 我尝试遵循他的指导方针 Android 帮助在 android 中编译 SoundTouc
  • 查询获取下一个身份? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 查询获取下一个身份 对于没有删除记录的表来说这是可能的 SELECT TOP 1 EMPID 1 FROM Employee ORDER
  • Spring MVC 同一表单上的多个 ModelAttribute

    我有一个带有两个模型属性的表单 一个是公民 另一个是惩罚 这两个对象由 jquery 选项卡分隔 我在使表单上的项目正确显示时遇到问题 有些项目正在显示 有些则没有 我的意思是 html 元素 我不确定当页面上有多个 ModleAttrib
  • 使用 jQuery 获取 Google+ 订阅计数

    可以用与上相同的方式获取 Google 订阅总数http www tomanthony co uk google plus one api example php http www tomanthony co uk google plus
  • 如何使用 R、Java 和 JRI 绘制图表?

    我对 R 很陌生 所以如果这是一个非常非常基本的问题 请原谅我 我编写了一个 R 脚本 它执行一些计算并在最后绘制箱线图 如果我从 R 控制台运行此脚本 它会正常运行并绘制图表 如果我从 Java 程序 JRI 站点上提供的示例 rtest
  • Angularjs ui 路由器。如何重定向到登录页面

    我有4个状态 仪表板 仪表板 main 仪表板 次要 login 仪表板是抽象的 它是 minor 和 main 状态的父状态 下面是我的代码 state dashboard url dashboard abstract true temp