关于如何实现“node.js 实现手机号验证码登录功能”的攻略,我可以提供如下的完整步骤。
步骤一:安装依赖库
要实现手机号验证码登录功能,需要使用到一些第三方依赖库,比如 express
、jsonwebtoken
、bcryptjs
等。可以通过以下命令安装:
npm install express jsonwebtoken bcryptjs
步骤二:设计接口
接下来,需要设计 API 接口来处理用户登录请求。比如设计一个 /api/login
接口,请求体包含 phone
和 code
参数,表示用户输入的手机号和验证码。后台接收请求后,需先校验验证码是否正确,若验证码正确,则生成一个 token,并返回给客户端。
app.post('/api/login', async (req, res) => {
const { phone, code } = req.body;
if (checkCode(phone, code)) {
const token = jwt.sign({ phone }, 'secret');
res.json({ code: 200, message: '登录成功', token });
} else {
res.json({ code: 400, message: '验证码错误' });
}
});
其中,checkCode()
函数是用于校验验证码是否正确。下面是一个示例实现:
const codes = {};
function sendCode(phone) {
const code = Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000;
codes[phone] = code;
// 此处调用短信服务商的接口发送短信验证码
}
function checkCode(phone, code) {
return codes[phone] && codes[phone] === Number(code);
}
步骤三:校验请求头中的 token
如果请求头中带有 token,那么在请求该接口之前,需要先校验 token 是否合法。代码实现如下:
app.post('/api/login', verifyToken, async (req, res) => {
const { phone, code } = req.body;
if (checkCode(phone, code)) {
const token = jwt.sign({ phone }, 'secret');
res.json({ code: 200, message: '登录成功', token });
} else {
res.json({ code: 400, message: '验证码错误' });
}
});
function verifyToken(req, res, next) {
const token = req.headers.authorization;
if (!token) return res.status(401).json({ code: 401, message: '未授权访问' });
jwt.verify(token.replace('Bearer ', ''), 'secret', (err, decoded) => {
if (err) return res.status(401).json({ code: 401, message: '未授权访问' });
req.userId = decoded.phone;
next();
});
}
其中,verifyToken
是一个中间件函数,用于校验请求头中的 token。若 token 不合法,则直接返回 401 状态码。
示例说明
下面以两个示例说明如何使用上述的代码实现功能。
示例一:发送验证码
首先,客户端需要发送一个请求来获取验证码,请求可以通过以下方式发送:
fetch('/api/send_code', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
phone: '13812345678'
})
})
.then(res => res.json())
.then(data => console.log(data));
若请求成功,则可以在后台的接口中调用 sendCode()
方法来发送验证码。此处不再赘述该方法的具体实现。
示例二:登录请求
客户端登录请求可以通过以下方式发送:
fetch('/api/login', {
method: 'POST',
headers: {'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token},
body: JSON.stringify({
phone: '13812345678',
code: '1234'
})
})
.then(res => res.json())
.then(data => console.log(data));
其中,token
是客户端请求登录接口时携带的 token,请求头中的 Authorization
字段的值为 Bearer
+ token。后台在接收到请求时,会校验该 token 是否合法。如果 token 合法,且验证码也正确,则返回登录成功的信息和新生成的 token。
以上就是使用 node.js 实现手机验证码登录功能的攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js 实现手机号验证码登录功能 - Python技术站