2016-04-25 83 views
0

我不确定这是否是最佳做法,但我只是试图在我的网站上为我创建一个简单的登录系统。我不想使用数据库来存储一个密码,我在整个网站上使用Angular。我不希望密码在JavaScript中以纯文本形式显示给任何人看。我认为的我可以在Angular if语句中使用php变量吗?

一个解决方案在做这样的事情:

$scope.loginValue = false; 
    $scope.loginFunction = function(password){ 
    if(password == <?php echo 'test123' ?>){ 
     $scope.loginValue = true; 
    } 
    } 

有谁知道我如何能够做到这一点?现在我得到一个错误,因为JavaScript不喜欢我的if语句中的'<'字符。同样,我不希望密码在JavaScript中可见,但我没有使用数据库或API调用。我也有建议。 :)

我的其他想法,使用哈希,我从来没有做过... ....是的,我愿意接受。 :)

谢谢大家提前。

******************以下更新******************

所以,我最终选择了@musicfuel建议的答案。我现在试图让这个工作。如上所示,我的login.php文件有以下几种:

<? echo $_POST['password'] == 'test123' ? true : false ?> 

密码是$ scope.password来自用户输入。当他们提交他们的凭据它调用此函数

$scope.loginFunction = function(){ 
    loginService.getLogin().then(function(response){ 
     console.log(response); 
    }, function(error){ 
     $rootScope.loggedIn = false; 
    }); 
}; 

这里是login服务:

myApp.controller('myController', ['$scope', '$rootScope', 'loginService', function myController($scope, $rootScope, loginService) { 

.service('loginService', ['$http', '$q', '$rootScope', function($http, $q, $rootScope){ 
    var getLogin = function() { 
     $http.post('login.php'), { 
      password: $scope.password 
     }, function (success) { 
      console.log("Login result: " + success); 
     }, function (error) { 
      console.log("Couldn't complete the login request."); 
     } 
    } 
    }]) 
}]); 

当此功能运行时,我得到以下错误:类型错误:loginService.getLogin不是一个函数 你知道为什么找不到它吗?

+0

*“我不希望密码是在JavaScript中可见,但我没有使用和数据库或API调用“*您必须进行API调用或以某种方式计算值,如果您不希望它出现在JS源代码中。即使你设法得到'<?php echo'test123'>>'工作,它只会将这个值放入发送给浏览器的JS源代码中。 –

+0

我想你应该阅读http://stackoverflow.com/q/13840429/218196以更好地了解客户端JS和服务器端PHP如何协同工作。 –

+0

谢谢@Felix Kling。决定做一个简单的login.php文件。谢谢您的帮助! – Jaromjj

回答

0

的原因错误是你的* .js文件很可能不是由PHP处理,静态地提供。您对JavaScript进行硬编码并直接检查的解决方案存在缺陷,因为JavaScript始终以纯文本显示。您可以对其进行混淆处理,并做一些诡计,但所有用于管理的代码也都可以看到并进行反向设计。

您确实应该考虑创建一个PHP端点并将输入的值传递给该端点,然后处理响应。例如,您可以创建一个简单的login.php文件,该文件仅检查GET或POST中的单个值与test123,然后返回正文中的字符串truefalse。这是一个简单的解决方案,但会阻止明文访问,并且可以轻松扩展以最终支持数据库访问。

假设您发送的变量是密码,它通过POST发送。你login.php可能是:

<? echo $_POST['password'] == 'test123' ? true : false ?> 

在角边,你会充分利用$ HTTP服务发送的变量和处理响应:

$http.post('login.php', { 
    password: $scope.password // Assuming you use ng-model for text entry binding 
}, function (success) { 
    console.log("Login result: " + success); 
}, function (error) { 
    console.log("Couldn't complete the login request."); 
} 
+0

只是在决定走这条路线后更新了我的问题。谢谢你的帮助。 – Jaromjj

0

您必须生成语法上有效的JavaScript,这意味着您的代码正在生成语法错误。例如一旦PHP处理完的页面,你会最终

if (password == test123) { 

test123极有可能是一个未定义/未知变量。

基本经验法则:从不EVER直接从PHP中将文本转储到JavaScript上下文中。始终使用json_encode:

if (password == <?php echo json_encode('test123'); ?>) { 

主要生产:

if (password = 'test123') { 
       ^-------^---note these quotes. 
+0

不解决*“我不希望密码在JavaScript中可见”*问题。此外,我认为在这种情况下的根本问题是JS不通过PHP。确实是 –

+0

。但至少JavaScript会起作用,而不是死于语法错误。 –

+0

感谢您的快速评论。那么,甚至可以从php中获取一个变量或字符串,并在javascript中使用密码验证,而无法在脚本中或调试时看到它的值? – Jaromjj

相关问题