新增 SMS 验证码注册、8 国手机号选择与 Redis 频控;优化登录/注册 UI 及图形验证码样式。 Co-authored-by: Cursor <cursoragent@cursor.com>
81 lines
2.2 KiB
TypeScript
81 lines
2.2 KiB
TypeScript
import { defineStore } from 'pinia';
|
|
import { ref } from 'vue';
|
|
import api from '../api';
|
|
|
|
export const useAuthStore = defineStore('auth', () => {
|
|
const token = ref(localStorage.getItem('token') || '');
|
|
const user = ref<{ id?: string; username?: string; locale?: string } | null>(
|
|
JSON.parse(localStorage.getItem('user') || 'null'),
|
|
);
|
|
|
|
const loginPromptVisible = ref(false);
|
|
const loginReturnTo = ref('');
|
|
|
|
function showLoginPrompt(returnTo?: string) {
|
|
loginReturnTo.value = returnTo || '';
|
|
loginPromptVisible.value = true;
|
|
}
|
|
|
|
function hideLoginPrompt() {
|
|
loginPromptVisible.value = false;
|
|
}
|
|
|
|
async function login(username: string, password: string, countryCode?: string) {
|
|
const dial = countryCode?.replace(/\D/g, '');
|
|
const { data } = await api.post('/player/auth/login', {
|
|
username,
|
|
password,
|
|
...(dial ? { countryCode: dial } : {}),
|
|
});
|
|
token.value = data.data.token;
|
|
user.value = data.data.user;
|
|
localStorage.setItem('token', token.value);
|
|
localStorage.setItem('user', JSON.stringify(user.value));
|
|
const returnTo = loginReturnTo.value;
|
|
loginReturnTo.value = '';
|
|
loginPromptVisible.value = false;
|
|
return returnTo;
|
|
}
|
|
|
|
async function register(
|
|
phone: string,
|
|
countryCode: string,
|
|
password: string,
|
|
smsCode: string,
|
|
sessionId: string,
|
|
inviteCode?: string,
|
|
) {
|
|
const locale = localStorage.getItem('locale') || 'zh-CN';
|
|
const code = inviteCode?.trim();
|
|
const dial = countryCode.replace(/\D/g, '');
|
|
const { data } = await api.post('/player/auth/register', {
|
|
phone,
|
|
countryCode: dial,
|
|
password,
|
|
smsCode,
|
|
sessionId,
|
|
locale,
|
|
...(code ? { inviteCode: code } : {}),
|
|
});
|
|
token.value = data.data.token;
|
|
user.value = data.data.user;
|
|
localStorage.setItem('token', token.value);
|
|
localStorage.setItem('user', JSON.stringify(user.value));
|
|
loginReturnTo.value = '';
|
|
loginPromptVisible.value = false;
|
|
}
|
|
|
|
function logout() {
|
|
token.value = '';
|
|
user.value = null;
|
|
localStorage.removeItem('token');
|
|
localStorage.removeItem('user');
|
|
}
|
|
|
|
return {
|
|
token, user, login, register, logout,
|
|
loginPromptVisible, loginReturnTo,
|
|
showLoginPrompt, hideLoginPrompt,
|
|
};
|
|
});
|