我遇到了在函数之间使用变量的问题。正如您在下面看到的那样,User.username可用并且在注册页面上很好,但当您转到登录页面时,我告诉它首先提醒User.username的值,它是否提示未定义?我在这里很困惑。我很确定我在这里错过了一个概念。无论如何,非常感谢你!:
这是一个傻瓜:http://plnkr.co/edit/qB3Gkeq5ji1YQyy0kpGH
这是我的 script.js :
app.controller("AuthCtrl", ["$scope", "Auth","$rootScope",
function($scope, Auth, $rootScope) {
var User = {}
$scope.createUser = function(username, email, password) {
$rootScope.usernames = username
User.username = username
$scope.message = null;
$scope.error = null;
var ref2 = new Firebase("https://uniquecoders.firebaseio.com/");
ref2.createUser({
email: $scope.email,
password: $scope.password
}, function(error, userData) {
if (error) {
switch (error.code) {
case "EMAIL_TAKEN":
alert("The new user account cannot be created because the email is already in use. Try to login");
break;
case "INVALID_EMAIL":
alert("The specified email is not a valid email.");
break;
case "INVALID_PASSWORD":
alert("The Specified Passowrd Is not valid.")
break;
default:
alert("Error creating user:", error);
}
} else {
alert("Successfully created user account with username" + User.username);
window.location.hash = "/User"
}
});
};
$scope.logIn = function(){
alert(User.username)
$rootScope.usernames = User.username
$scope.message = null;
$scope.error = null;
var ref2 = new Firebase("https://uniquecoders.firebaseio.com/");
ref2.authWithPassword({
"email" : $scope.logInemail,
"password" : $scope.logInemailpassword
}, function(error, userData){
if(error){
alert("Login Failed Because : " + error)
}
else{
alert("Logged In!")
window.location.hash = "/User"
}
})
}
/* $scope.removeUser = function() {
$scope.message = null;
$scope.error = null;
Auth.$removeUser({
email: $scope.email,
password: $scope.password
}).then(function() {
$scope.message = "User removed";
}).catch(function(error) {
$scope.error = error;
});
};*/
}
]);
答案 0 :(得分:0)
您必须记住,Web应用程序是Web服务器的浏览器之间的通信。浏览器和服务器可以在不同的机器上(即使它们在测试时不是。)
有两种方法可以完成这项工作
当浏览器和服务器通信时,一些信息被保存并在两端来回传递 - 这称为cookie。这是在页面之间保存数据的最常用方法。浏览器请求页面。当它收到服务器的回复时,它包含一个cookie。下次浏览器请求页面时,它会在其中包含cookie的请求。通过这种方式,服务器知道请求与先前的请求有关。
服务器非常智能,可以跟踪所有会话"由不同的浏览器。然后它保存有关该通信的会话数据 - 当它从同一浏览器获得下一个请求时,它会转到会话数据并检索有关该浏览器及其正在执行的操作的信息。 (通常这是用cookie完成的。)
答案 1 :(得分:0)
当页面重新加载时,重新执行整个javascript。因此,登录过程中填写的用户对象在登录功能中不再可用,因为在点击注册按钮时页面已重新加载
因此我们需要将用户名存储在cookie中,以便我们可以随时访问它。即使从javascript运行时删除它也会在浏览器缓存中出现
将密码存储在cookie中以解决安全问题存在风险。
成功注册后,将用户名保存在cookie中 像这样的事情
document.cookie ="username =" +username + "; " +"email ="+ email;
在登录功能中获取cookie值并检查用户的电子邮件是否与输入的相同
function getCookie(name ) {
var pairs = document.cookie.split("; "),
count = pairs.length, parts;
while ( count-- ) {
parts = pairs[count].split("=");
if ( parts[0] === name )
return parts[1];
}
return false;
}
var username=getCookie("username");
var email=getCookie("username");
if($scope.logInemail ==email)
{
alert(username);
}