feat(登录): 添加openid支持并引入登录验证码机制

为了增强登录安全性和支持微信登录,本次提交引入了openid字段,并在用户登录流程中添加了验证码机制。具体修改包括:
1. 在VerifySmsParams类型中添加openid字段
2. 在Ab98Login.vue中传递openid参数
3. 在App.vue中更新tokenLogin调用以包含openid
4. 在ab98/index.ts中修改tokenLogin接口以支持openid
5. 在ab98-user.ts中引入登录验证码逻辑,确保登录状态验证更加安全
This commit is contained in:
dzq 2025-05-10 17:16:24 +08:00
parent 638300113b
commit 401d8ac4ca
5 changed files with 14 additions and 6 deletions

View File

@ -47,7 +47,7 @@ onMounted(() => {
() => wxStore.userid, () => wxStore.userid,
(newVal) => { (newVal) => {
if (newVal && !ab98UserStore.isLogin) { if (newVal && !ab98UserStore.isLogin) {
tokenLogin(ab98UserStore.tokenLogin, newVal).then(res => { tokenLogin(ab98UserStore.tokenLogin, newVal, wxStore.openid).then(res => {
if (res?.code === 0 && res.data?.success) { if (res?.code === 0 && res.data?.success) {
ab98UserStore.setTel(res.data.tel) ab98UserStore.setTel(res.data.tel)
ab98UserStore.setUserInfo(res.data) ab98UserStore.setUserInfo(res.data)

View File

@ -55,10 +55,10 @@ export function logoutApi(token: string) {
} }
/** ab98Token登录 */ /** ab98Token登录 */
export function tokenLogin(token: string, userid: string) { export function tokenLogin(token: string, userid: string, openid: string) {
return request<ApiResponseData<LoginData>>({ return request<ApiResponseData<LoginData>>({
url: '/wx/login/tokenLogin', url: '/wx/login/tokenLogin',
method: 'get', method: 'get',
params: { token, userid } params: { token, userid, openid }
}) })
} }

View File

@ -57,4 +57,5 @@ export type VerifySmsParams = {
/** 验证码 */ /** 验证码 */
vcode: string vcode: string
userid: string userid: string
openid: string
} }

View File

@ -111,7 +111,8 @@ const handleSubmit = async () => {
token: userStore.token, token: userStore.token,
tel: form.value.tel, tel: form.value.tel,
vcode: form.value.vcode, vcode: form.value.vcode,
userid: wxStore.userid userid: wxStore.userid,
openid: wxStore.openid
}) })
if (data.success) { if (data.success) {

View File

@ -9,7 +9,8 @@ const STORAGE_KEYS = {
USERID: 'ab98_userid', USERID: 'ab98_userid',
REGISTERED: 'ab98_registered', REGISTERED: 'ab98_registered',
TEL: 'ab98_tel', TEL: 'ab98_tel',
TOKEN: 'ab98_token' TOKEN: 'ab98_token',
LOGIN_CODE: 'ab98_login_code'
} }
/** /**
@ -39,9 +40,12 @@ export const useAb98UserStore = defineStore("ab98User", () => {
const token = ref<string>(storedToken ? decodeURIComponent(storedToken) : ""); const token = ref<string>(storedToken ? decodeURIComponent(storedToken) : "");
const tokenLogin = ref<string>(""); const tokenLogin = ref<string>("");
// 登录验证码
const loginCode = '1'; // 默认验证码
// 用户登录状态 // 用户登录状态
const isLogin = ref<boolean>(false); const isLogin = ref<boolean>(false);
isLogin.value = tel.value ? true : false; const storedLoginCode = localStorage.getItem(STORAGE_KEYS.LOGIN_CODE);
isLogin.value = tel.value && storedLoginCode === String(loginCode) ? true : false;
/** /**
* *
@ -60,6 +64,7 @@ export const useAb98UserStore = defineStore("ab98User", () => {
localStorage.setItem(STORAGE_KEYS.REGISTERED, JSON.stringify(data.registered)) localStorage.setItem(STORAGE_KEYS.REGISTERED, JSON.stringify(data.registered))
tel.value = data.tel tel.value = data.tel
localStorage.setItem(STORAGE_KEYS.TEL, encodeURIComponent(data.tel)) localStorage.setItem(STORAGE_KEYS.TEL, encodeURIComponent(data.tel))
localStorage.setItem(STORAGE_KEYS.LOGIN_CODE, encodeURIComponent(loginCode))
} }
/** /**
@ -80,6 +85,7 @@ export const useAb98UserStore = defineStore("ab98User", () => {
tel.value = "" tel.value = ""
localStorage.removeItem(STORAGE_KEYS.TEL) localStorage.removeItem(STORAGE_KEYS.TEL)
localStorage.removeItem(STORAGE_KEYS.TOKEN) localStorage.removeItem(STORAGE_KEYS.TOKEN)
localStorage.removeItem(STORAGE_KEYS.LOGIN_CODE)
} }
/** /**