Vue
Ikiform に送信する Vue の単一ファイルコンポーネントと、シークレットキーを使う Nuxt のサーバールート。
Vue からは SDK または fetch でブラウザーから送信します。いつものセットアップ以外に、プラグインやビルドの手順は必要ありません。
SDK をインストールする
npm install @ikiform/sdk単一ファイルコンポーネント
<script setup>
import { submit } from "@ikiform/sdk";
import { ref } from "vue";
const status = ref("idle");
const errors = ref({});
const message = ref("");
async function onSubmit(event) {
status.value = "sending";
const result = await submit("frm_xxxxxxxxxxxxxxxx", new FormData(event.target));
if (result.ok) {
status.value = "sent";
return;
}
errors.value = result.error.fields ?? {};
message.value = result.error.message;
status.value = "error";
}
</script>
<template>
<p v-if="status === 'sent'">Thanks, we got it.</p>
<form v-else @submit.prevent="onSubmit">
<label>
Email
<input name="email" type="email" required />
</label>
<p v-if="errors.email">{{ errors.email[0] }}</p>
<label>
Message
<textarea name="message"></textarea>
</label>
<input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
<p v-if="status === 'error' && !errors.email" role="alert">{{ message }}</p>
<button :disabled="status === 'sending'">Send</button>
</form>
</template>Ikiform の人間確認を使うフォームでは、React のガイドのように、submit の前に challenge(formId) を呼び出し、トークンを { turnstileToken } として渡します。
Nuxt のサーバールート
サーバーから送信したい場合は、シークレットキーを付けてボディを転送するサーバールートを追加します。ページからは自分のルートに JSON を送信します。ハイドレーション前のフォールバック付きで、ブラウザーから直接送信するコンポーネントについては Nuxt を参照してください。
export default defineEventHandler(async (event) => {
const body = await readBody(event);
return $fetch("https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IKIFORM_SECRET_KEY}` },
body,
ignoreResponseError: true,
});
});サーバーから送られる送信はすべてサーバーの IP アドレスから届くため、Ikiform の訪問者ごとのレート制限は全訪問者をまとめてカウントします。標準のプリセットは IP とフォームごとに 1 分あたり 5 件までなので、アクセスの多いサイトでは上限に達することがあります。可能ならブラウザーから送信するか、サーバーを経由するフォームでは緩めまたはカスタムのレート制限を選んでください。