AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)


Posted in Javascript onDecember 12, 2016

本文实例讲述了AngularJS实现用户登录状态判断的方法。分享给大家供大家参考,具体如下:

使用AngularJS的单页面应用时,由于是本地路由在控制页面跳转,但是有的时候我们需要判断用户是否登录来判断用户是否能进入界面。

angularjs是mvc架构所以实现起来很容易也很灵活,我们只MainController里增加一个路由事件侦听并判断,这样就可以避免未登录用户直接输入路由地址来跳转到登录界面地址了

代码中的 $rootScope.user是登录后把用户信息放到了全局rootScope上,方便其他地方使用,$rootScope.defaultPage也是默认主页面,初始化的时候写死到rootScope里的。

$rootScope.$on('$stateChangeStart',function(event, toState, toParams, fromState, fromParams){
  if(toState.name=='login')return;// 如果是进入登录界面则允许
  // 如果用户不存在
  if(!$rootScope.user || !$rootScope.user.token){
    event.preventDefault();// 取消默认跳转行为
    $state.go("login",{from:fromState.name,w:'notLogin'});//跳转到登录界面
  }
});

另外还有用户已经登录,但是登录超时了,还有就是增加后台接口的判断来增强安全性。不能完全依靠本地逻辑

我们在model里面增加一个用户拦截器,在rensponseError中判断错误码,抛出事件让Contoller或view来处理

app.factory('UserInterceptor', ["$q","$rootScope",function ($q,$rootScope) {
  return {
    request:function(config){
      config.headers["TOKEN"] = $rootScope.user.token;
      return config;
    },
    responseError: function (response) {
      var data = response.data;
      // 判断错误码,如果是未登录
      if(data["errorCode"] == "500999"){
        // 清空用户本地token存储的信息,如果
        $rootScope.user = {token:""};
        // 全局事件,方便其他view获取该事件,并给以相应的提示或处理
        $rootScope.$emit("userIntercepted","notLogin",response);
      }
      // 如果是登录超时
      if(data["errorCode"] == "500998"){
        $rootScope.$emit("userIntercepted","sessionOut",response);
      }
      return $q.reject(response);
    }
  };
}]);

别忘了要注册拦截器到angularjs的config中哦

app.config(function ($httpProvider) {
  $httpProvider.interceptors.push('UserInterceptor');
});

最后在controller中处理错误事件

$rootScope.$on('userIntercepted',function(errorType){
  // 跳转到登录界面,这里我记录了一个from,这样可以在登录后自动跳转到未登录之前的那个界面
  $state.go("login",{from:$state.current.name,w:errorType});
});

最后还可以在loginController中做更多的细节处理

// 如果用户已经登录了,则立即跳转到一个默认主页上去,无需再登录
if($rootScope.user.token){
  $state.go($rootScope.defaultPage);
  return;
}

另外在登录成功回调后还可以跳转到上一次界面,也就是上面记录的from

var from = $stateParams["from"];
$state.go(from && from != "login" ? from : $rootScope.defaultPage);

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
基于jQuery的倒计时插件代码
May 07 Javascript
jQuery Tools tooltip使用说明
Jul 14 Javascript
你必须知道的JavaScript 变量命名规则详解
May 07 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
Nov 22 Javascript
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
jQuery实现表单步骤流程导航代码分享
Aug 28 Javascript
实用jquery操作表单元素的简单代码
Jul 04 Javascript
jQuery简单设置文本框回车事件的方法
Aug 01 Javascript
利用fecha进行JS日期处理
Nov 21 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
Aug 17 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
Oct 26 Javascript
修改Vue打包后的默认文件名操作
Aug 12 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
Dec 12 #Javascript
AngularJS封装指令方法详解
Dec 12 #Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
Dec 12 #Javascript
最好用的Bootstrap fileinput.js文件上传组件
Dec 12 #Javascript
jQuery Ajax File Upload实例源码
Dec 12 #Javascript
VueJs与ReactJS和AngularJS的异同点
Dec 12 #Javascript
layer实现弹窗提交信息
Dec 12 #Javascript
You might like
PHP 采集获取指定网址的内容
2010/01/05 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
PHP文件上传操作实例详解
2016/09/27 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
Python isinstance函数介绍
2015/04/14 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
python如何读写json数据
2018/03/21 Python
python读取xlsx的方法
2018/12/25 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
广告学专业毕业生自荐信
2013/09/24 职场文书
客户经理岗位职责
2013/12/08 职场文书
高中生的自我鉴定范文
2014/01/24 职场文书
交通事故检查书范文
2014/01/30 职场文书
小学校本培训方案
2014/06/06 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
银行求职信范文
2019/05/13 职场文书
如何撰写创业策划书
2019/06/27 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
导游词之青岛崂山
2019/12/27 职场文书