我可以在Angular if语句中使用php变量吗?

时间:2016-04-25 16:49:55

标签: javascript php angularjs password-protection

我不确定这是否是最佳做法,但我只是想在我拥有的网站上为我创建一个简单的登录系统。我不想使用数据库存储一个密码,而且我在网站上使用Angular。我不希望密码在javascript中以纯文本形式供所有人查看。

我想到的一个解决方案是做这样的事情:

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

有谁知道我怎么能够做到这一点?现在我收到一个错误,因为JavaScript并不喜欢&#39;&lt;&#39;我的if语句中的字符。同样,我不希望密码在javascript中可见,但我没有使用和数据库或API调用。我也提出了建议。 :)

我有其他的想法,使用哈希,我以前从未做过......是的,我对想法持开放态度。 :)

提前谢谢大家。

**********************以下更新********************** < / p>

所以,我最终得到了@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;
    });
};

这是loginService:

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.");
      } 
    }
  }])
}]);

当此函数运行时,我收到以下错误:TypeError:loginService.getLogin不是函数 你知道它为什么找不到它吗?

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

错误的原因是您的* .js文件可能不由PHP处理并且是静态提供的。您在硬编码值和直接在JavaScript中检查的解决方案存在缺陷,因为JavaScript始终以纯文本形式显示。你可以对它进行模糊处理并做一些技巧,但是管理它的所有代码也都是可见的并且是反向工程的。

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

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

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

在Angular方面,您将利用$ 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.");
}