مسیریابی مبتنی بر فایل ReactNative Expo با احراز هویت Firebase

Expo Router بهترین مفاهیم مسیریابی را از وب به برنامه های بومی iOS و Android می آورد. هر فایل در فهرست برنامه به طور خودکار به مسیری در مسیریابی تلفن همراه شما تبدیل می شود و ساخت، نگهداری و مقیاس پروژه را آسان تر از همیشه می کند. https://expo.github.io/router/docs
مسیریابی مبتنی بر فایل Expo ( قسمت 1 )
قسمت اول کار با Expo Router و File Based Navigation در ویدیوی زیر پوشش داده شده است
https://www.youtube.com/watch?v=WNZbARN7lMM
احراز هویت Firebase ( قسمت 2 )
قسمت دوم دارای مراحلی است که در زیر به همراه ویدیویی که در کل پروژه در GitHub آمده است. کد منبع هر دو ویدیو در لینک GitHub در انتهای پست موجود است.
برپایی
npx expo install firebase
npx expo install @react-native-async-storage/async-storage
بقیه بر اساس دستورالعمل های ارائه شده توسط مستندات یکپارچه سازی Expo Firebase
فایل پیکربندی firebase را ایجاد کنید
برای به خاطر سپردن کاربر وارد شده قبلی به React Native نیاز به افزودن پایداری داریم. به همین دلیل است که کتابخانه react-native async-storage را اضافه کردیم.
// firebase-config.js
const firebaseConfig = { ... }
export const app = initializeApp(firebaseConfig);
export const auth = initializeAuth(app, {
persistence : getReactNativePersistence(AsyncStorage)
})
اکنون شیء auth را صادر می کنیم و به جای فراخوانی از آن در سراسر برنامه استفاده می کنیم getAuth
که در.
ما میخواهیم برنامه کاربرانی را که وارد سیستم شدهاند به خاطر بسپارد، بنابراین باید کد اضافی اضافه کنیم. برای بررسی یک کاربر احراز هویت شده باید تماس بگیریم onAuthStateChange
هنگامی که برنامه راه اندازی می شود و قبل از ارائه پشته ناوبری مناسب منتظر پاسخ باشید.
در فروشگاه ما، ما را اضافه کرده ایم user
و initialized
خواص به حالت برنامه بعد از onAuthStateChange
در صورت وجود کاربر، فروشگاه را به روز می کنیم و نشان می دهیم که برنامه اکنون مقداردهی اولیه شده است. ما می توانیم از طریق فروشگاه به مقادیر به روز شده دسترسی داشته باشیم و از آن مقادیر استفاده کنیم index.js
// store.js
export const AuthStore = new Store({
isLoggedIn: false,
initialized: false,
user: null,
});
const unsub = onAuthStateChanged(auth, (user) => {
console.log("onAuthStateChange", user);
AuthStore.update((store) => {
store.user = user;
store.isLoggedIn = user ? true : false;
store.initialized = true;
});
});
در index.js منتظر میمانیم تا مقداردهی اولیه تکمیل شود و سپس اقدام مناسب را انجام میدهیم تا در صورت عدم وجود کاربر، کاربر را به مسیر ورود یا در صورت وجود کاربر به مسیر تبها هدایت کنیم.
const { initialized, isLoggedIn } = AuthStore.useState();
React.useEffect(() => {
if (!navigationState?.key || !initialized) return;
const inAuthGroup = segments[0] === "(auth)";
if (
// If the user is not signed in and the initial segment is not anything
// segment is not anything in the auth group.
!isLoggedIn &&
!inAuthGroup
) {
// Redirect to the login page.
router.replace("/login");
} else if (isLoggedIn) {
// go to tabs root.
router.replace("/(tabs)/home");
}
}, [segments, navigationState?.key, initialized]);
ما تماس های firebase را بسته بندی می کنیم تا بتوانیم در صورت لزوم فروشگاه را به روز کنیم. در زیر فهرست کامل تماسها برای ورود، خروج و ایجاد حساب کاربری مشاهده میشود.
export const appSignIn = async (email, password) => {
try {
const resp = await signInWithEmailAndPassword(auth, email, password);
AuthStore.update((store) => {
store.user = resp.user;
store.isLoggedIn = resp.user ? true : false;
});
return { user: auth.currentUser };
} catch (e) {
return { error: e };
}
};
export const appSignOut = async () => {
try {
await signOut(auth);
AuthStore.update((store) => {
store.user = null;
store.isLoggedIn = false;
});
return { user: null };
} catch (e) {
return { error: e };
}
};
export const appSignUp = async (email, password, displayName) => {
try {
// this will trigger onAuthStateChange to update the store..
const resp = await createUserWithEmailAndPassword(auth, email, password);
// add the displayName
await updateProfile(resp.user, { displayName });
AuthStore.update((store) => {
store.user = auth.currentUser;
store.isLoggedIn = true;
});
return { user: auth.currentUser };
} catch (e) {
return { error: e };
}
};
ویدئو ( قسمت 2 )
https://www.youtube.com/watch?v=Os5_DRhN2Aw
لینک های مربوطه
کد منبع
ادغام Firebase در یک شاخه جداگانه در مخزن است
React Native Code Walkthrough: Expo Router Tabs with Authentication App
استفاده کنید expo-router
برای ساخت ناوبری بومی با استفاده از فایلهای موجود در app/
فهرست راهنما.
به ادغام با احراز هویت Firebase مراجعه کنید