4

我正在开发AngularJs应用程序,后端是在Ruby on Rails中开发的。我们还没有使用Devise gem进行用户认证。整个用户认证过程是用AngularJs编写的。现在我想使用AngularJs为我的应用程序添加“保持登录状态”功能。如何在AngularJS中实现“保持登录状态”功能

问题: 如何在AngularJs中为我的应用程序实现“让我登录”功能?

我使用angularJs的视图和控制器和模型是用Ruby on Rails编写的。

我已将下面的session-controller.js附加到视图文件中。

会话controller.js

App.controller('SessionsCtrl', function($rootScope, $scope, $http, $location, Facebook, $timeout, flash, $remember) { 

    $scope.fbloginContent = ""; 

    $scope.googleloginContent = ""; 

    $scope.linkedinloginContent = ""; 

    $scope.$on('facebook_login', function() { 
     $timeout(function() { 
      $scope.fbloginContent = Facebook.getfbLoginContent(); 
      $scope.loginEmail = $scope.fbloginContent.email; 
     }, 2000); 
    }); 

    $scope.$on('google_login', function() { 
     $timeout(function() { 
      $scope.googleloginContent = helper.getGoogleloginContent(); 
      $scope.loginEmail = $scope.googleloginContent.email; 
     }, 2000); 
    }); 

    $scope.$on('linkedin_login', function() { 
     $timeout(function() { 
      $scope.linkedinloginContent = linkedInHelper.linkedinloginContent(); 
      $scope.loginEmail = $scope.linkedinloginContent['emailAddress']; 
     }, 2000); 
    }); 

    $scope.login = function() { 
     if ($('#signInForm').valid()) { 
      if ($scope.linkedinloginContent) { 
       var param = { 
        "user" : { 
         "email" : $scope.linkedinloginContent['emailAddress'], 
         "password" : $scope.loginPassword 
        } 
       }; 
      } else if ($scope.googleloginContent) { 
       var param = { 
        "user" : { 
         "email" : $scope.googleloginContent.email, 
         "password" : $scope.loginPassword 
        } 
       }; 
      } else if ($scope.fbloginContent) { 
       var param = { 
        "user" : { 
         "email" : $scope.fbloginContent.email, 
         "password" : $scope.loginPassword 
        } 
       }; 
      } else { 
       if ($scope.loginEmail && $scope.loginPassword) { 

        var param = { 
         "user" : { 
          "email" : $scope.loginEmail, 
          "password" : $scope.loginPassword 
         } 
        }; 
       } else { 
        var param = { 
         "user" : { 
          "email" : $("#signInForm [name=email]").val(), 
          "password" : $("#signInForm [name=password]").val() 
         } 
        }; 
       } 
      } 
      $http({ 
       method : 'post', 
       url : '/api/sessions', 
       data : param 
      }).success(function(data, status) { 
       createCookie("access_token", data.user.access_token, ''); 
       createCookie("user", data.user.id, ''); 
       createCookie("name", data.user.name, ''); 
       if (data.user.temp_password == true && data.user.login_count == 1) { 
        $location.path('/changepassword'); 
       } else { 
        if (data.user.role == "SmartonAdmin") { 
         $location.path('/api/users'); 
         flash.info = ($rootScope.config && $rootScope.config.login_message) ? $rootScope.config.login_message : "Logged in successfully"; 
         goToTop(); 
         if (data.user.login_count == 1) { 
          $('#intro-video').modal('show'); 
         } 
        } else { 
         $location.path('/student_dashboard'); 
         flash.info = ($rootScope.config && $rootScope.config.login_message) ? $rootScope.config.login_message : "Logged in successfully"; 
         goToTop(); 
         if (data.user.login_count == 1) { 
          $('#intro-video').modal('show'); 
         } 
        } 
       } 
      }).error(function(data, status) { 
       flash.error = data.errors; 
       goToTop(); 
      }); 
     } 
    }; 

    $scope.validations = function() { 

     $('#signInForm').validate({ 
      rules : { 
       email : { 
        required : true, 
        email : true 
       }, 
       password : { 
        required : true, 
       } 
      }, 
      messages : { 
       email : { 
        required : "Email can't be blank.", 
        email : "Email must be in the format of [email protected]", 
        remote : "Email already exists." 
       }, 
       password : { 
        required : "Password can't be blank.", 
        minlength : "Password should have minimum of 8 characters.", 
        maxlength : "Password should not exceed more than 15 characters." 
       } 
      }, 
      errorPlacement : function(error, element) { 
       error.insertBefore('.errorMsg1'); 
      } 
     }); 

    }; 

    $scope.validations(); 

    $("#loginemail").keyup(function() { 
     if (!this.value) { 
      $(".errormsg").css("display", "none"); 
     } 
     if (!(/^[a-zA-Z0-9._-][email protected][a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/i.test(this.value))) { 
      $(".errormsg").css("display", "none"); 
     } 
    }); 

    $("#loginpassword").keyup(function() { 
     if (!this.value) { 
      $(".errormsg").css("display", "none"); 
     } 
    }); 

    $scope.showForgotPasswordForm = function() { 
     $('#signInForm').css('opacity', '0.5'); 
     $('#forgotPassForm').show(); 
    }; 

    $scope.remember = false; 
     if ($remember('email') && $remember('password')) { 
      $scope.remember = true; 
      $scope.email = $remember('email'); 
      $scope.password = $remember('password'); 
     } 
     $scope.rememberMe = function() { 
      if ($scope.remember) { 
       $remember('email', $scope.email); 
       $remember('password', $scope.password); 
      } else { 
       $remember('email', ''); 
       $remember('password', ''); 
      } 
     }; 

}); 

意见文件作为模板(AngularJs):

<input type="checkbox" name="remember" class="signup-footage terms-condition " data-ng- click="rememberMe()" data-ng-model="remember"> Remember Me 

我想要什么,如果用户点击 “记住我” 复选框,然后单击Next时间,用户确实需要登录到系统。如何使用AngualarJs实现?

回答

1

您可以在用户的​​本地存储中保留这种选项,但要小心您放置的位置,应该存储访问令牌或加密数据,避免以纯文本存储用户凭据,请参阅此链接看你如何使用角存储本地存储: https://github.com/grevory/angular-local-storage

希望可以帮到

相关问题