【发布时间】:2023-03-30 22:51:01
【问题描述】:
我创建了一个根据用户电子邮件和密码获取用户个人资料的程序
当密码错误时 STATUS = 2
当电子邮件错误时 STATUS = 0
当两者都正确时 STATUS = 1
现在的问题是当连续调用这个过程时(整个查询一次给出下面),对于第一个过程,电子邮件和密码是正确的 STATUS = 1 收到但在第二个过程中,如果电子邮件是错误的,它仍然给出 STATUS = 1 但是它应该给出 0。但如果我一次调用一个过程,它会给出正确的结果。
-- Correct email and pass
CALL GetUserProfile("ankit11101998@gmail.com","abcde", @status, @PhoneNumber, @country, @photo, @emailId, @name, @msg); SELECT @status, @PhoneNumber, @country, @photo, @emailId, @name, @msg;
-- Wrong email and pass
CALL GetUserProfile("aaaaaankit11101998@gmail.com","abcde", @status, @PhoneNumber, @country, @photo, @emailId, @name, @msg); SELECT @status, @PhoneNumber, @country, @photo, @emailId, @name, @msg;
正确电子邮件的结果并通过
+---------+--------------+----------+-----------+-------------------------+-------+---------+
| @status | @PhoneNumber | @country | @photo | @emailId | @name | @msg |
+---------+--------------+----------+-----------+-------------------------+-------+---------+
| 1 | 6284567890 | 93 | imagelink | ankit11101998@gmail.com | akash | success |
+---------+--------------+----------+-----------+-------------------------+-------+---------+
错误邮件的结果并通过
+---------+--------------+----------+--------+----------+-------+---------+
| @status | @PhoneNumber | @country | @photo | @emailId | @name | @msg |
+---------+--------------+----------+--------+----------+-------+---------+
| 1 | NULL | NULL | NULL | NULL | NULL | success |
+---------+--------------+----------+--------+----------+-------+---------+
GetUserProfile 过程
CREATE DEFINER=`admin`@`%` PROCEDURE `GetUserProfile`(IN `UserSignUp` VARCHAR(350), IN `pWord` TEXT, OUT `status` INT, OUT `PhoneNumber` TEXT, OUT `country` INT, OUT `userphoto` TEXT, OUT `emailId` TEXT, OUT `username` TEXT, OUT `msg` TEXT)
READS SQL DATA
COMMENT '0 = user dont exists, 1 = success, 2 - wrong pword'
BEGIN
SET @yesNo = 0;
CALL UserAuth( UserSignUp, pWord, @yesNo );
IF @yesNo = 0 THEN
SET msg = "user don't exists";
END IF;
IF @yesNo = 1 THEN
SELECT name, email, photo, mobile_no, countryCode INTO username, emailId, userphoto, PhoneNumber, country FROM App_users
WHERE email = LOWER ( UserSignUp ) AND password = pWord ;
SET msg = "success";
END IF;
IF @yesNo = 2 THEN
SET msg = "wrong password";
END IF;
SET status = @yesNo;
END
用户验证过程
CREATE DEFINER=`admin`@`%` PROCEDURE `UserAuth`(IN `UserEmail` VARCHAR(350), IN `PWord` TEXT, OUT `success` INT)
READS SQL DATA
COMMENT ' status =2 : pw error, status =0: user dont extsts'
BEGIN
SET success = 0;
SELECT password INTO @Word FROM App_users WHERE email = LOWER( UserEmail );
IF @Word IS NOT NULL THEN
IF @Word = PWord THEN
SET success = 1;
ELSE
SET success = 2;
END IF;
END IF;
结束
任何人都可以帮助或提出解决此问题的建议。提前谢谢你。
【问题讨论】:
-
我已经把图片改成代码了,请你帮忙。
-
不要以纯文本形式保存密码,这是一种安全隐患,在保存密码之前对其进行哈希处理并进行映射
-
我正在加密密码,目前仅用于测试目的,它们被保存为平面
标签: mysql sql database stored-procedures logic