mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-31 10:13:32 -04:00 
			
		
		
		
	Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com> Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { ref, watch, computed } from "vue";
 | |
| import type { UserOut } from "~/lib/api/types/user";
 | |
| 
 | |
| export const useMealieAuth = function () {
 | |
|   const auth = useAuth();
 | |
|   const { setToken } = useAuthState();
 | |
|   const { $axios } = useNuxtApp();
 | |
| 
 | |
|   // User Management
 | |
|   const lastUser = ref<UserOut | null>(null);
 | |
|   const user = computed(() => lastUser.value);
 | |
| 
 | |
|   watch(
 | |
|     () => auth.data.value,
 | |
|     (val) => {
 | |
|       if (val) {
 | |
|         lastUser.value = val as UserOut;
 | |
|       }
 | |
|       else {
 | |
|         lastUser.value = null;
 | |
|       }
 | |
|     },
 | |
|     { immediate: true },
 | |
|   );
 | |
| 
 | |
|   // Auth Status Management
 | |
|   const lastAuthStatus = ref<string>(auth.status.value);
 | |
|   const loggedIn = computed(() => lastAuthStatus.value === "authenticated");
 | |
| 
 | |
|   watch(
 | |
|     () => auth.status.value,
 | |
|     (val) => {
 | |
|       if (val !== "loading") {
 | |
|         lastAuthStatus.value = val;
 | |
|       }
 | |
|     },
 | |
|     { immediate: true },
 | |
|   );
 | |
| 
 | |
|   async function signIn(...params: Parameters<typeof auth.signIn>) {
 | |
|     await auth.signIn(...params);
 | |
|     refreshCookie(useRuntimeConfig().public.AUTH_TOKEN);
 | |
|   }
 | |
| 
 | |
|   async function oauthSignIn() {
 | |
|     const params = new URLSearchParams(window.location.search);
 | |
|     const { data: token } = await $axios.get<{ access_token: string; token_type: "bearer" }>("/api/auth/oauth/callback", { params });
 | |
|     setToken(token.access_token);
 | |
|     await auth.getSession();
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     user,
 | |
|     loggedIn,
 | |
|     signIn,
 | |
|     signOut: auth.signOut,
 | |
|     signUp: auth.signUp,
 | |
|     refresh: auth.refresh,
 | |
|     oauthSignIn,
 | |
|   };
 | |
| };
 |