在Node.js中使用Sequelize如何实现用户名或邮箱均可登录的功能?
实现方案
核心是用Sequelize提供的Op.or逻辑操作符构造查询条件,支持同时匹配用户名或邮箱字段。
步骤1:引入操作符
首先需要在代码顶部引入Sequelize的操作符对象:
const { Op } = require('sequelize'); // ES Module导入写法如下 // import { Op } from 'sequelize';
步骤2:修改查询逻辑
根据前端传参的不同场景,对应调整代码即可:
场景1:前端仅提供一个账号输入框(用户可填用户名/邮箱,参数统一命名为loginAccount,最常用方案)
const { loginAccount, password } = req.body; const user = await Users.findOne({ where: { [Op.or]: [ { username: loginAccount }, { email: loginAccount } ] } });
场景2:前端分别传递username和email两个参数
const { username, email, password } = req.body; const user = await Users.findOne({ where: { [Op.or]: [ { username: username }, { email: email } ] } });
注意事项
- 请提前给
Users表的username和email字段设置唯一索引,避免出现同值多用户的情况,导致查询结果异常 - 查询到用户后请务必比对加密后的密码哈希,不要直接存储和比对明文密码
内容的提问来源于stack exchange,提问作者Divad
相关产品推荐
相关产品推荐

