Midari Create > webアプリケーション製品 > Wakarana > サンプルコード >

【Wakarana】2段階認証でのログイン

Wakaranaで利用できる、パスワードとTOTPを併用した2段階認証のサンプルコードです。

Wakaranaでは、wakarana::login関数の第3引数にTOTPのPINを指定することで単一段階での2要素認証も可能ですが、2要素認証を有効にしているユーザーだけにPINの入力欄を表示させる場合は2段階認証を使用します。

sample_1.html

<form action="sample_2.php" method="post">
    ID <input type="text" name="user_id"><br>
    パスワード <input type="text" name="password"><br>
    <button type="submit">送信</button>
</form>

sample_2.php

<?php
include "wakarana/main.php";

$wakarana = new wakarana();

//ログイン認証処理
$user = $wakarana->login($_POST["user_id"], $_POST["password"], $_POST["totp_pin"]);

if (is_object($user)) {
    print $user->get_name()."としてログインしました";
} elseif (is_string($user)) {
    print '時間ベースワンタイムコードを入力してください。';
    print '<form action="sample_3.php" method="post">';
    print '    <input type="hidden" name="tmp_token" value="'.$user.'">';
    print '    PIN <input type="text" name="pin">';
    print '    <button type="submit">送信</button>';
    print '</form>
} else {
    print "ユーザー名またはパスワードが違います";
}

sample_3.php

<?php
include "wakarana/main.php";

$wakarana = new wakarana();

//ログイン認証処理
$user = $wakarana->totp_login($_POST["tmp_token"], $_POST["pin"]);

if (is_object($user)) {
    print $user->get_name()."としてログインしました";
} else {
    print "PINが違います";
}