Я считаю, что веб -приложение nuxt.js (vue.js) с Firebase правильно настроено, так как я могу войти в систему с Firebase/Apple, используя SignInWithPopup. Проблема возникает только при входе с перенаправлением. Я правильно перенаправлен на страницу входа Apple. Я ввожу свои учетные данные и перенаправлен обратно на страницу входа. Абсолютно ничего не происходит-нет сообщения об ошибке, ничего.
// Define page meta to use appropriate layout
definePageMeta({
layout: 'web-no-tab-bar'
});
useSeoMeta({
title: 'Sign-In'
});
import { httpsCallable } from 'firebase/functions'
import { GoogleAuthProvider, OAuthProvider, signInWithPopup, updateProfile, getAdditionalUserInfo, signInWithRedirect, getRedirectResult, getAuth } from 'firebase/auth'
import { doc, getDoc, Firestore } from 'firebase/firestore'
// Store instances
const authStore = useAuthStore()
const flashStore = useFlashStore()
// Firebase instances
const { $auth, $firestoreDb, $functionsInstance } = useNuxtApp()
const auth = getAuth();
getRedirectResult(auth)
.then((result) => { //-----------> ALWAYS NULL
// Check if result is not null before processing
if (result) {
alert('result')
const credential = OAuthProvider.credentialFromResult(result);
if (credential) {
// You can also get the Apple OAuth Access and ID Tokens.
const accessToken = credential.accessToken;
const idToken = credential.idToken;
}
// The signed-in user info.
const user = result.user;
}
})
.catch((error) => {
// Handle Errors here.
const errorCode = error.code;
const errorMessage = error.message;
// The email of the user's account used.
const email = error.customData.email;
// The credential that was used.
const credential = OAuthProvider.credentialFromError(error);
// ...
});
/**
* ================================
* Apple Sign-In
* ================================
*/
const signInWithApple = async () => {
try {
const provider = new OAuthProvider('apple.com')
// Configure Apple provider with required scopes
provider.addScope('email')
provider.addScope('name')
const result = await signInWithRedirect($auth, provider)
} catch (err: any) {
// eslint-disable-next-line no-console
console.error('Apple sign-in failed:', err)
flashStore.show(err?.message || 'Apple sign-in failed. Please try again.')
}
}
/**
* ================================
* Providers Sign-In
* ================================
*/
// Verify user profile after authentication. Not for email sign-in. For providers.
const checkUserProfileAfterProvidersSignIn = async (userId: string) => {
try {
const userDoc = await getDoc(doc($firestoreDb as Firestore, 'users', userId))
// If missing username or country, treat as new user
if (!userDoc.exists() || !userDoc.data()?.username || !userDoc.data()?.country) {
navigateTo('/authentication/user-info-collect')
} else {
// Persist user country in localStorage for later use
if (utils.isLocalStorageAvailable()) {
const key = `selectedCountry_${userId}`
window.localStorage.setItem(key, userDoc.data()?.country.toLowerCase())
}
// Redirect back to the page the visitor came from (or home)
const target = utils.isLocalStorageAvailable()
? window.localStorage.getItem('previousUrlForAfterSignIn') || '/'
: '/'
navigateTo(target)
}
} catch (err) {
// eslint-disable-next-line no-console
console.error('Error verifying user profile after Google sign-in:', err)
navigateTo('/')
}
}
// Store previous URL in localStorage for future redirect handling
onMounted(() => {
if (utils.isLocalStorageAvailable()) {
const previousUrl = (window.history.state && window.history.state.back) || document.referrer || '/';
localStorage.setItem('previousUrlForAfterSignIn', previousUrl);
}
});
Подробнее здесь: https://stackoverflow.com/questions/796 ... tjs-js-app