|
|
@@ -37,6 +37,9 @@ YML = str(ROOT / "yoshop-java/src/main/resources/application.yml")
|
|
|
TEXT = open(YML, encoding="utf-8").read()
|
|
|
DB_PWD = re.findall(r"password:\s*(.+)", TEXT)[0].strip().strip("\"'")
|
|
|
REDIS_PWD = re.findall(r"password:\s*(.+)", TEXT)[1].strip().strip("\"'")
|
|
|
+# 是否校验短信验证码:跟随后端 yoshop.sms.verify-code(未配置时为 false)
|
|
|
+_m = re.search(r"verify-code:\s*(\w+)", TEXT)
|
|
|
+SMS_VERIFY = bool(_m) and _m.group(1).lower() in ("true", "1", "yes")
|
|
|
|
|
|
S = requests.Session()
|
|
|
S.trust_env = False
|
|
|
@@ -290,28 +293,36 @@ def main():
|
|
|
|
|
|
# ---------------------------------------------------------------- 登录
|
|
|
print("\n[3] 手机号 + 短信验证码登录")
|
|
|
- r = post("/api/passport/login", {"mobile": TEST_MOBILE}, token=None)
|
|
|
- check("缺短信验证码报错", r.get("status") == 500 and "短信验证码不能为空" in (r.get("message") or ""), r)
|
|
|
r = post("/api/passport/login", {"smsCode": "123456"}, token=None)
|
|
|
check("缺手机号报错", r.get("status") == 500 and "手机号不能为空" in (r.get("message") or ""), r)
|
|
|
- redis_del("yoshop:api:sms:" + TEST_MOBILE)
|
|
|
- r = post("/api/passport/login", {"mobile": TEST_MOBILE, "smsCode": "123456"}, token=None)
|
|
|
- check("验证码不存在报错", r.get("status") == 500 and "短信验证码不存在" in (r.get("message") or ""), r)
|
|
|
r = post("/api/passport/login", {"mobile": "12345", "smsCode": "123456"}, token=None)
|
|
|
check("手机号格式校验", r.get("status") == 500 and "手机号格式不正确" in (r.get("message") or ""), r)
|
|
|
|
|
|
- _, sms_code, _ = send_sms(TEST_MOBILE)
|
|
|
- r = post("/api/passport/login", {"mobile": TEST_MOBILE, "smsCode": "000000"}, token=None)
|
|
|
- check("验证码错误报错", r.get("status") == 500 and "短信验证码不正确" in (r.get("message") or ""), r)
|
|
|
- check("验证码错误后次数减一", json.loads(redis_get("yoshop:api:sms:" + TEST_MOBILE)).get("times") == 4,
|
|
|
- redis_get("yoshop:api:sms:" + TEST_MOBILE))
|
|
|
+ if SMS_VERIFY:
|
|
|
+ r = post("/api/passport/login", {"mobile": TEST_MOBILE}, token=None)
|
|
|
+ check("缺短信验证码报错", r.get("status") == 500 and "短信验证码不能为空" in (r.get("message") or ""), r)
|
|
|
+ redis_del("yoshop:api:sms:" + TEST_MOBILE)
|
|
|
+ r = post("/api/passport/login", {"mobile": TEST_MOBILE, "smsCode": "123456"}, token=None)
|
|
|
+ check("验证码不存在报错", r.get("status") == 500 and "短信验证码不存在" in (r.get("message") or ""), r)
|
|
|
+
|
|
|
+ _, sms_code, _ = send_sms(TEST_MOBILE)
|
|
|
+ r = post("/api/passport/login", {"mobile": TEST_MOBILE, "smsCode": "000000"}, token=None)
|
|
|
+ check("验证码错误报错", r.get("status") == 500 and "短信验证码不正确" in (r.get("message") or ""), r)
|
|
|
+ check("验证码错误后次数减一", json.loads(redis_get("yoshop:api:sms:" + TEST_MOBILE)).get("times") == 4,
|
|
|
+ redis_get("yoshop:api:sms:" + TEST_MOBILE))
|
|
|
+
|
|
|
+ r = post("/api/passport/login", {"mobile": TEST_MOBILE, "smsCode": sms_code}, token=None)
|
|
|
+ check("登录后验证码用后即焚", redis_get("yoshop:api:sms:" + TEST_MOBILE) is None)
|
|
|
+ else:
|
|
|
+ print(" (短信通道未接入,yoshop.sms.verify-code=false:验证码随便填)")
|
|
|
+ r = post("/api/passport/login", {"mobile": TEST_MOBILE}, token=None)
|
|
|
|
|
|
- r = post("/api/passport/login", {"mobile": TEST_MOBILE, "smsCode": sms_code}, token=None)
|
|
|
login_data = field(r, "data") or {}
|
|
|
check("登录成功", r.get("status") == 200 and r.get("message") == "登录成功", r)
|
|
|
+ if not SMS_VERIFY:
|
|
|
+ check("空短信验证码也能登录(联调开关)", r.get("status") == 200, r)
|
|
|
check("返回 userId 与 token", isinstance(login_data.get("userId"), int)
|
|
|
and re.fullmatch(r"[0-9a-f]{32}", str(login_data.get("token"))) is not None, login_data)
|
|
|
- check("登录后验证码用后即焚", redis_get("yoshop:api:sms:" + TEST_MOBILE) is None)
|
|
|
user_id = login_data.get("userId")
|
|
|
check("新用户写入库", bool(user_id) and db(f"SELECT COUNT(*) FROM yoshop_user WHERE user_id={user_id}")[0][0] == 1)
|
|
|
nick = db(f"SELECT nick_name, platform FROM yoshop_user WHERE user_id={user_id}")[0] if user_id else ("", "")
|
|
|
@@ -324,9 +335,13 @@ def main():
|
|
|
check("登录态可用", r.get("status") == 200 and info.get("userId") == user_id, r)
|
|
|
check("用户信息手机号打码", info.get("mobile") == "139****1111", info.get("mobile"))
|
|
|
|
|
|
- _, sms_code, _ = send_sms(TEST_MOBILE)
|
|
|
- r = post("/api/passport/login", {"mobile": TEST_MOBILE, "smsCode": sms_code},
|
|
|
- token=None)
|
|
|
+ if SMS_VERIFY:
|
|
|
+ _, sms_code, _ = send_sms(TEST_MOBILE)
|
|
|
+ r = post("/api/passport/login", {"mobile": TEST_MOBILE, "smsCode": sms_code},
|
|
|
+ token=None)
|
|
|
+ else:
|
|
|
+ r = post("/api/passport/login", {"mobile": TEST_MOBILE, "smsCode": "000000"},
|
|
|
+ token=None)
|
|
|
check("重复登录复用同一账号", field(r, "data", {}).get("userId") == user_id, r)
|
|
|
|
|
|
# ---------------------------------------------------------------- 微信小程序登录
|