mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-05-12 02:56:13 +08:00
120 lines
2.4 KiB
TypeScript
120 lines
2.4 KiB
TypeScript
import type { User } from '#/auth';
|
|
import type { ApiError } from '#/error';
|
|
|
|
export const useAuth = createSharedComposable(() => {
|
|
const auth = useLocalStorage('auth', '');
|
|
const message = useMessage();
|
|
|
|
const user = reactive<User>({
|
|
username: '',
|
|
password: '',
|
|
});
|
|
|
|
const isLogin = computed(() => auth.value !== '');
|
|
|
|
function clearUser() {
|
|
user.username = '';
|
|
user.password = '';
|
|
}
|
|
|
|
function check() {
|
|
if (user.username === '') {
|
|
message.warning('Please Enter Username!');
|
|
return false;
|
|
}
|
|
|
|
if (user.password === '') {
|
|
message.warning('Please Enter Password!');
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function login() {
|
|
const { execute, onResult, onError } = useApi(apiAuth.login, {
|
|
message: {
|
|
success: 'Login Success!',
|
|
},
|
|
});
|
|
|
|
onResult((res) => {
|
|
auth.value = `${res.token_type} ${res.access_token}`;
|
|
clearUser();
|
|
});
|
|
|
|
onError((err) => {
|
|
const error = err as ApiError;
|
|
message.error(error.detail);
|
|
});
|
|
|
|
if (check()) {
|
|
execute(user.username, user.password);
|
|
}
|
|
}
|
|
|
|
const { execute: logout, onResult: onLogoutResult } = useApi(apiAuth.logout, {
|
|
failRule: (res) => !res,
|
|
message: {
|
|
success: 'Logout Success!',
|
|
fail: 'Logout Failed!',
|
|
},
|
|
});
|
|
|
|
onLogoutResult(() => {
|
|
clearUser();
|
|
auth.value = '';
|
|
});
|
|
|
|
const { execute: refresh, onResult: onRefreshResult } = useApi(
|
|
apiAuth.refresh,
|
|
{
|
|
message: {
|
|
success: 'Refresh Success!',
|
|
},
|
|
}
|
|
);
|
|
|
|
onRefreshResult((res) => {
|
|
auth.value = `${res.token_type} ${res.access_token}`;
|
|
});
|
|
|
|
function update() {
|
|
const { execute, onResult } = useApi(apiAuth.update, {
|
|
failRule: (res) => res.message !== 'update success',
|
|
message: {
|
|
success: 'Update Success!',
|
|
fail: 'Update Failed!',
|
|
},
|
|
});
|
|
|
|
onResult((res) => {
|
|
if (res.message === 'update success') {
|
|
auth.value = `${res.token_type} ${res.access_token}`;
|
|
clearUser();
|
|
} else {
|
|
user.password = '';
|
|
}
|
|
});
|
|
|
|
if (check()) {
|
|
if (user.password.length < 8) {
|
|
message.error('Password must be at least 8 characters long!');
|
|
} else {
|
|
execute(user.username, user.password);
|
|
}
|
|
}
|
|
}
|
|
|
|
return {
|
|
auth,
|
|
user,
|
|
isLogin,
|
|
|
|
login,
|
|
logout,
|
|
refresh,
|
|
update,
|
|
};
|
|
});
|