Nodejs 很明显,贵站需要给新用户提供人类识别服务
Nodejs 很明显,贵站需要给新用户提供人类识别服务
强烈建议给注册时间不超过一周(几天适合站长看着办)的用户加个发帖验证码。 老用户就免了,确实扰人。 另外后台是不是要做个黑名单,把广告专业户的ip封杀一段时间。
当然可以。以下是一个基于Node.js的简单示例,展示如何为新用户提供人类识别服务,并且只对新用户启用验证码。
示例代码
-
安装必要的依赖: 首先,你需要安装一些常用的库,比如
express
和express-validator
来处理HTTP请求和表单验证。npm install express express-validator
-
创建基本的Express应用:
const express = require('express'); const { body, validationResult } = require('express-validator'); const app = express(); const PORT = 3000; // 模拟数据库中的用户数据 const users = []; // 中间件:解析请求体 app.use(express.urlencoded({ extended: true })); // 注册路由 app.post('/register', [ body('username').notEmpty().withMessage('用户名不能为空'), body('email').isEmail().withMessage('请输入有效的电子邮件地址'), body('password').isLength({ min: 5 }).withMessage('密码长度至少为5个字符') ], (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } const newUser = req.body; newUser.registeredAt = new Date(); users.push(newUser); res.send('注册成功!'); }); // 发帖路由 app.post('/post', [ body('content').notEmpty().withMessage('帖子内容不能为空'), // 只对新用户启用验证码 body('captcha').custom((value, { req }) => { const user = users.find(u => u.username === req.body.username); if (user && ((new Date() - user.registeredAt) / (1000 * 60 * 60 * 24)) < 7) { // 验证码检查逻辑 if (value !== 'correctCaptcha') { throw new Error('验证码错误'); } } return true; }) ], (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } res.send('帖子发布成功!'); }); app.listen(PORT, () => { console.log(`服务器运行在 http://localhost:${PORT}`); });
解释
-
用户注册:用户通过POST请求向
/register
发送数据进行注册。我们使用express-validator
来验证表单数据,并将其存储在模拟的users
数组中。 -
发帖:用户通过POST请求向
/post
发送帖子内容。如果用户注册时间不超过7天,则需要输入验证码。验证码的具体实现可以根据实际情况自定义,这里只是简单地检查是否等于'correctCaptcha'
。 -
中间件:我们使用
body()
方法来验证表单数据,并使用custom()
方法来添加自定义的验证码验证逻辑。
这样,我们就实现了对新用户的验证码保护,同时避免了对老用户的打扰。
针对你的需求,可以使用 Node.js 结合 express
和 recaptcha
来实现一个简单的验证码功能。以下是具体的实现步骤和代码示例。
步骤
- 安装必要的依赖包:
express
: 用于创建服务器和处理 HTTP 请求。express-validator
: 用于验证表单输入。google-recaptcha
: 用于处理 Google reCAPTCHA 验证。
npm install express express-validator google-recaptcha
-
配置 reCAPTCHA:
- 前往 Google reCAPTCHA 获取你的 site key 和 secret key。
-
创建 Node.js 应用:
- 创建一个简单的 Express 应用,包含注册和验证码功能。
示例代码
const express = require('express');
const { check, validationResult } = require('express-validator');
const Recaptcha = require('google-recaptcha');
const app = express();
app.use(express.urlencoded({ extended: true }));
// 假设这是你的数据库,实际中应该用真实的数据库
let users = [];
app.get('/register', (req, res) => {
res.send(`
<form method="POST" action="/register">
<label for="username">Username</label>
<input type="text" name="username" id="username">
<div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>
<button type="submit">Register</button>
</form>
`);
});
app.post('/register', [
check('username').not().isEmpty().withMessage('Username is required'),
check('recaptcha').custom((value, { req }) => {
const recaptcha = new Recaptcha({
secret: 'YOUR_SECRET_KEY',
response: req.body['g-recaptcha-response']
});
return recaptcha.verify()
.then(() => {
// 验证通过
return true;
})
.catch(() => {
// 验证失败
throw new Error('Invalid captcha');
});
})
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const newUser = {
username: req.body.username,
registrationDate: new Date(),
};
users.push(newUser);
res.send(`User registered: ${newUser.username}`);
});
app.listen(3000, () => console.log('Server started on port 3000'));
解释
-
Express 路由:
/register
GET 路由提供注册表单。/register
POST 路由处理表单提交,并进行验证码验证。
-
reCAPTCHA 验证:
- 使用
google-recaptcha
包来验证用户的 reCAPTCHA 响应。
- 使用
-
错误处理:
- 使用
express-validator
来验证表单数据,并处理验证错误。
- 使用
通过这种方式,你可以为新用户添加一个简单的验证码系统,以防止机器人注册和发帖。