AngularJs用户登录的一些处理
AngularJs用户登录的交互及验证、阻止FQ处理
1. 静态页面搭建及ng的form表单验证实现:
1 <div class="register-frame-all"> 2 <div class="register-frame"> 3 <div class="register-msg"> 4 <i></i> 5 <form name="loginForm" ng-submit="loginAction()"> 6 <div class="form-group"> 7 <div class="input-group"> 8 <span class="input-group-addon register-user"></span> 9 <input autocomplete="off" type="number" class="form-control" placeholder="请输入手机号" required ng-model="loginData.loginName" name="loginName"> 10 </div> 11 <div class="input-group"> 12 <span class="input-group-addon register-pwd"></span> 13 <input type="password" class="form-control" placeholder="请输入密码" required ng-model="loginData.pwd" name="pwd"> 14 </div> 15 <button type="submit" class="btn btn-block btn-danger" 16 ng-disabled="!( (loginForm.loginName.$valid) && (loginForm.pwd.$valid) )">登录</button> 17 <em></em> 18 </div> 19 </form> 20 </div> 21 <div class="register-pic" ng-style="registerRnum"></div> 22 </div> 23 </div>
2. 定义用户登录的控制器,在控制器中使用http服务处理登录接口:
1 $http({ 2 url:G.apiUrl_dl+'loginByPhone', 3 method:'post', 4 data:{ 5 'phone':loginName, 6 'pwd':pwd 7 }, 8 headers:{'Content-Type':'application/x-www-form-urlencoded'}, 9 transformRequest: function(obj) { 10 var str = []; 11 for(var p in obj){ 12 str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 13 } 14 return str.join("&"); 15 } 16 }).success(function(data){ 17 // 登录成功或失败后的逻辑操作 18 });
3. 如果登录成功后将用户的数据保存到cookie或session中 用$state服务进行跳转到指定的页面中:
1 // 登录成功 2 if($scope.loginActionData.token){ 3 sessionStorage.setItem("token", $scope.loginActionData.token); 4 sessionStorage.setItem("tsname", $scope.loginActionData.name); 5 sessionStorage.setItem("rights", $scope.loginActionData.rights); 6 sessionStorage.setItem("userId", $scope.loginActionData.userId); 7 sessionStorage.setItem("departmentsId", $scope.loginActionData.departmentsId); 8 sessionStorage.setItem("departmentsName", $scope.loginActionData.departmentsName); 9 $state.go('index'); 10 }else{ 11 // 登录失败后弹出提示框提示 12 $('#loginAction').modal('show'); 13 }
4. 接下来就是防止用户跳过登录页面通过其他方法(如在地址栏直接输出地址进入页面) 的防FQ操作:
这个方法的操作我放在之前曾经说过得控制器最先执行的run方法中执行,每次进到一个页面之前都会进行检查该用户是否合法登录,如果不是合法登录我们将会让他跳转到登录页面
1 angular.module.run(['$rootScope','$state',function($rootScope,$state){ 2 $rootScope.$on('$stateChangeStart',function(event,toState){ 3 // 防止FQ 4 if(!(sessionStorage.getItem("token")))$state.go('register'); 5 }); 6 }]);