2016-04-25 10 views
0

これがベストプラクティスであるかどうかはわかりませんが、自分のウェブサイトで私のために単純なログインシステムを作成しようとしています。私は1つのパスワードを格納するためにデータベースを使用したくないし、サイト全体でAngularを使用している。誰もが見るためにパスワードがプレーンテキストになることを望んでいません。私はこれを実現することができるかもしれないどのように誰もが知っていAngular if文でphp変数を使用できますか?

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

:私は考え

一つの解決策は、このような何かをやっていましたか? JavaScriptは私のif文で '<'が好きではないので、今私はエラーが発生します。再び、私はパスワードがjavascriptに表示されることを望んでいませんが、私はデータベースやAPI呼び出しを使用していません。私も同様の提案をしています。 :)

私が持っていた他の考えは、私が以前にしたことのないハッシュを使用していました....ええ、私はアイデアを開いています。 :)

ありがとうございます。

********************** ********************** BELOW UPDATE

だから、@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機能 ではありませんそれが見つからない理由を知っていますか?

+0

:角側で

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

を、あなたは変数を送信し、応答を処理するために$ HTTPサービスを活用しますjavascriptで表示されますが、データベースやAPI呼び出しを使用していません。* JSソースに表示したくない場合は、API呼び出しを行うか、値を計算する必要があります。 '<?php echo 'test123'?>'を実行することができたとしても、単にその値をブラウザに送られたJSソースに入れます。 –

+0

クライアントサイドJSとサーバサイドPHPがどのように連携しているかを理解するには、http://stackoverflow.com/q/13840429/218196を読んでください。 –

+0

ありがとう@Felix Kling。シンプルなlogin.phpファイルを作ることを決めました。助けてくれてありがとう! – Jaromjj

答えて

0

エラーの理由は、あなた*の.jsファイルがPHPで処理され、静的に提供していない可能性があるということです。値をハードコーディングしてJavaScriptで直接チェックするソリューションには、JavaScriptがプレーンテキストで常に表示されるという欠点があります。それを難読化してトリッキーにすることもできますが、それを管理するすべてのコードも表示され、リバースエンジニアリングされます。

実際にPHPエンドポイントを作成し、それに入力された値を渡して応答を処理してください。たとえば、単純なlogin.phpファイルを作成して、GETまたはPOSTの1つの値をtest123に対してチェックし、文字列trueまたはfalseを本文に戻すことができます。これは簡単な解決策ですが、クリアテキストへのアクセスを妨げ、最終的にデータベースアクセスをサポートするように簡単に拡張できます。

送信している変数がパスワードで、POST経由で送信されたとします。あなたのlogin.phpは次のようになります。「私は、パスワードはなりたくない*

$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

関連する問題