フォーム認証のロジックの書き方
フォーム認証のロジックの書き方
フォーム認証を設定した場合、そのゾーンに未認証でアクセスすると設定したログインフォームが表示されます。また、認証をかける時に、そのログイン フォームがPOSTする先はconfirmで設定したページにします。この2 つのページは、そのゾーンの中にありますが、認証のためのものなのでログインしていない状態でもアクセスすることができます。
ここで、ログインすることとは、どういうことかを説明します。Alinous-Coreでは、ログインするということは、セッションの中にログイン情報を生成することを意味します。セッション情報をどのような形式で生成するかは以下のようになります。

まずは、ログインするためのフォームを作らなくてはなりません。ログインフォームは下図のようなものを作成します。ログインフォームは設定ファイルの
login
タグで指定したページを使います。

ソースは次のようになります。
|
ここでは、Alinous-Coreのカスタムバリデータを利用しています。alns:validateという属性が最初のINPUTタグについています が、この属性を指定することでカスタムのバリデーションをかけることができます。カスタムのバリデーションが指定された場合、このフォームからPOSTし たときにカスタムのチェック関数が呼ばれ、値が不正だと判断された場合には、再度このフォームに強制的に画面遷移します。このときに、< SPAN>タグの中身のエラーメッセージが表示されます。では、カスタムのバリデーションのロジックはどこにあるのでしょうか? このフォームをPOSTする先の「confirm.html」のロジックに対応する「confirm.alns」を見てみましょう。
// 通常のロジックはここからスタート
// return で0以外を返すとそのページにフォワードされる
return "/admin/";
// バリデーター用のコールバック関数
function validate($formName, $inputName, $value, $IN, $SESSION)
{
$userId = $IN.userId;
$pass = $IN.password;
SELECT * INTO RECORDS FROM AUTH_TABLE
WHERE USERS = $userId AND
PASSWORDS = $pass;
$NumRoles = Array.size(@RECORDS);
if($NumRoles == 0){
return "custom";
}else{
$SESSION.AUTH.USER = $userId;
for($i = 0; $i < $NumRoles; $i++){
$SESSION.AUTH.ROLES[$i] = $RECORDS[$i].ROLES;
}
}
return 0;
}
|
validate()という関数がありますが、カスタムのバリデーションのロジックはこの関数で実装します。この関数では、0を返したときは値が正常で、不正な値の場合は、不正な理由を文字列で返します。この不正な理由は、エラーメッセージを表示するための
SPAN
タグに設定されている alns:validate="custom"の部分と連動しています。バリデーションが正常に行われると、通常通り、「confirm.alns」の先頭からロジックが始まり、次に対応するデザインの「confirm.html」が呼ばれます。今回はreturn文で0以外の値を返しているのでそのページにフォワードされます。







