用户可以使用login.html表单,该表单使用提交按钮调用角度post方法,并将用户名/电子邮件和密码发送到login.php,其中存储了MySQL表。用户信息的其余部分从表中收集并存储在$ _SESSION中,会话采用json编码并发送回angular.js。
Angular AuthController
app.controller("AuthController", function($scope, $http, $rootScope, $window) {
$scope.ctlr = 'Auth';
$scope.ngPOSTLogin = function() {
var data = {
UserName: $scope.UserName,
Password: $scope.Password
}
$http.post('server/auth/login.php', JSON.stringify(data))
.then(function(result) {
$rootScope.user = result.data;
//$window.sessionStorage['$rootScope.user'] = JSON.stringify($rootScope.user);
});
};
});
现在,如果用户刷新页面,$ rootScope也会刷新,这意味着登录数据会丢失。使用$ window.sessionStorage保存整个JSON对象(带有密码),表明它应该加密。 问题很简单,即使重新加载页面,我如何保留用户的登录信息。我不想使用某人的github项目(例如ngStorage)。 我的整个项目 - https://github.com/AquaSolid/RAMA_Angular_PHP
这是login.php返回的示例
{"ID":"3","UserName":"TommyGun","FirstName":"Tommy","LastName":"Larson","Email":"tommy.larson@gmail.com","Logged":true}
密码永远不会被退回,我在写这个问题时犯了一个错误,抱歉..
答案 0 :(得分:2)
为什么要在浏览器中存储密码?该应用程序不需要它。用户不需要它。服务器不需要它。它只是一个没有上升空间的安全漏洞。
当用户登录时,不要发回DB记录中的所有信息。只发回应用程序需要运行的内容。其余的可以保留在会话中。
至于你关于提神的问题。会话或本地存储是可行的方法。在服务器端,将last_seen
时间戳存储在$_SESSION
中。每次用户发出新请求时刷新它。如果用户暂时没有看到,则不会刷新。所以你要做的就是检查$_SESSION['last_seen']
是否在最近20分钟内或其他什么。如果距离过去太远,请致电session_destroy()
并要求重新登录。