我可以在 Angular if 语句中使用 php 变量吗?
Can I use a php variable in an Angular if statement?
我不确定这是否是最佳做法,但我只是想在我拥有的网站上为我创建一个简单的登录系统。我不想使用数据库来存储一个密码,我在整个网站上使用 Angular。我不希望密码在 javascript 中以纯文本形式供任何人查看。
我想到的一个解决方案是做这样的事情:
$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;
});
};
这是登录服务:
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.");
}
}
}])
}]);
当这个函数运行时,我得到以下 error:TypeError:loginService.getLogin 不是一个函数
你知道为什么找不到吗?
您必须生成语法上有效的 javascript,这意味着您的代码生成语法错误。例如一旦 php 处理完页面,您将得到
if (password == test123) {
和 test123
极有可能是一个 undefined/unknown 变量。
基本经验法则:永远不要 永远 直接将 PHP 中的文本转储到 javascript 上下文中。始终使用 json_encode:
if (password == <?php echo json_encode('test123'); ?>) {
产生:
if (password = 'test123') {
^-------^---note these quotes.
错误的原因是您的 *.js 文件可能没有被 PHP 处理并且是静态提供的。您对值进行硬编码并直接在 JavaScript 中检查的解决方案存在缺陷,因为 JavaScript 将始终以纯文本形式显示。您可以混淆它并做一些诡计,但所有用于管理的代码也将是可见的并被逆向工程。
您确实应该考虑创建一个 PHP 端点并将输入的值传递给该端点,然后处理响应。例如,您可以创建一个简单的 login.php
文件,它仅检查 GET 或 POST 中的单个值与 test123
,然后 returns 字符串 true
或false
在正文中。这是一个简单的解决方案,但会阻止明文访问,并且可以轻松扩展以最终支持数据库访问。
假设您要发送的变量是密码,它是通过 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.");
}
我不确定这是否是最佳做法,但我只是想在我拥有的网站上为我创建一个简单的登录系统。我不想使用数据库来存储一个密码,我在整个网站上使用 Angular。我不希望密码在 javascript 中以纯文本形式供任何人查看。
我想到的一个解决方案是做这样的事情:
$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;
});
};
这是登录服务:
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.");
}
}
}])
}]);
当这个函数运行时,我得到以下 error:TypeError:loginService.getLogin 不是一个函数 你知道为什么找不到吗?
您必须生成语法上有效的 javascript,这意味着您的代码生成语法错误。例如一旦 php 处理完页面,您将得到
if (password == test123) {
和 test123
极有可能是一个 undefined/unknown 变量。
基本经验法则:永远不要 永远 直接将 PHP 中的文本转储到 javascript 上下文中。始终使用 json_encode:
if (password == <?php echo json_encode('test123'); ?>) {
产生:
if (password = 'test123') {
^-------^---note these quotes.
错误的原因是您的 *.js 文件可能没有被 PHP 处理并且是静态提供的。您对值进行硬编码并直接在 JavaScript 中检查的解决方案存在缺陷,因为 JavaScript 将始终以纯文本形式显示。您可以混淆它并做一些诡计,但所有用于管理的代码也将是可见的并被逆向工程。
您确实应该考虑创建一个 PHP 端点并将输入的值传递给该端点,然后处理响应。例如,您可以创建一个简单的 login.php
文件,它仅检查 GET 或 POST 中的单个值与 test123
,然后 returns 字符串 true
或false
在正文中。这是一个简单的解决方案,但会阻止明文访问,并且可以轻松扩展以最终支持数据库访问。
假设您要发送的变量是密码,它是通过 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.");
}