برنامه نویسی

مسیریابی مبتنی بر فایل 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 مراجعه کنید

📝 یادداشت

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا