Recaptcha
使用 Google Recaptcha 加強安全性
前端
使用 vue-recaptcha-v3 進行防護
先找到建立 Vue 實體的位置,加入設定
js
app.use(VueReCaptcha, {
siteKey: import.meta.env.VITE_RECAPTCHA_SITE_KEY
})需要進行防護的表單送出時加上
js
const recaptcha = useReCaptcha()
const submit = handleSubmit(async () => {
// 等待 recaptcha 載入完成
await recaptcha.recaptchaLoaded()
// 執行 recaptcha 動作 login,名稱可自訂
const token = await recaptcha.executeRecaptcha('login')
// 送出資料到後端時加上 recaptcha 回傳的 token
await apiProduct.create({
// ...其他表單資料
'g-recaptcha-response': token,
})
})也可以視情況顯示或隱藏徽章
js
const recaptcha = useReCaptcha()
recaptcha.instance.value.showBadge()
recaptcha.instance.value.hideBadge()後端
使用 express-recaptcha 套件進行後端處理
編寫成 middleware 後,在需要的路由使用
js
import { RecaptchaV3 } from 'express-recaptcha'
const recaptcha = new RecaptchaV3(process.env.RECAPTCHA_SITE_KEY, process.env.RECAPTCHA_SECRET_KEY)
export default async (req, res, next) => {
recaptcha.verify(req, (error, data) => {
// data.score,區間是 0 ~ 1,分數越低越像機器人
if (!error && data.score >= 0.5) {
next()
} else {
res.status(400).json({ success: false, message: 'Recaptcha Error' })
}
})
}