JavaScript クライアントでの認証
DataSnap REST への移動
生成された JavaScript プロキシを使用して構成済みの TDSAuthenticationManager コンポーネントを持つサーバー上のサーバー メソッドを呼び出すクライアントを作成している場合は、(OnUserAuthenticate や OnUserAuthorize の実装でユーザー名やパスワードの値を考慮しているかどうかに応じて)JavaScript プロキシのコンストラクタにユーザー資格情報を渡さなければならない場合があります。 それには、まず base64.js ファイルへの参照を Web ページに含める必要があります。REST アプリケーション ウィザードを使用していれば、このファイルはプロジェクトに含まれています。 このファイルはまた、RAD Studio のインストール場所の dsrest サブディレクトリにもあります。
<script type="text/javascript" src="js/base64.js"></script>
それが終わったら、プロキシ クラスのインスタンスの作成箇所に移動し、以下の新しいコンストラクタ入力を持つようにコードを変更します。
var Proxy = new TServerMethods1(getAuth(USERNAME,PASSWORD));
getAuth 関数は、base64.js ファイルを使用してユーザー名とパスワードを必要な形式でエンコードする便利な手段です。 USERNAME と PASSWORD は実際の値に置き換える必要があります。それらの値を設定するには、たとえば、フォームを作成してから以下のコードで値を取得するなど、任意の方法を選択できます。
<html>
<head>
<title>Authentication/Authorization Example</title>
<script type="text/javascript" src="base64.js"></script>
<script type="text/javascript" src="json-min.js"></script>
<script type="text/javascript" src="ServerFunctionExecutor.js"></script>
<script type="text/javascript" src="ServerFunctions.js"></script>
<script type="text/javascript">
function doEcho()
{
var userName = document.getElementById("namefield"); //get the user name from the form
var password = document.getElementById("passwordfield"); //get the password from the form
//create the proxy instance with the specified user credentials
var Proxy = new TServerMethods1(getAuth(userName, password));
var Response = Proxy.EchoString("Hello World");
//Will show an error message if authorization failed,
//or the JSON Object of parameters if successful
alert(Response.toJSONString());
}
</script>
</head>
<body>
<form onsubmit="doEcho(); return false;">
<input id="namefield" type="text"/><br />
<input id="passwordfield" type="text"/><br />
<input id="runButton" type="submit" value="INVOKE" />
</form>
</body>
</html>
1 点気をつけなければいけないことは、作成されたすべてのプロキシ クラス インスタンスは(そして実際には、ServerFunctionExecutor.js コードを直接または間接的に使用するものはいずれも)、同じセッション ID を使用するという点です。 これは、一旦、サーバー メソッドが 1 つの呼び出されると、そのセッションが切れるまで、同じセッション ID が、それ以降その AJAX クライアントからのすべての呼び出しで使用されることを意味します。 認証は 1 回だけ行われるため、いったん正常に認証されれば、渡されるユーザー名とパスワードは無視され、ユーザー名やパスワードを変更しても、新しいセッションを開始するまでは、その変更は無視されます。