2016-04-25 80 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

相關問題