تمدید شد! تا ۶۰ درصد تخفیف شگفت انگیز نوروزی! {{افزایش قیمت آموزش‌ها در سال جدید}}

اطلاعات بیشتر..
ثانیه
دقیقه
ساعت
روز
مهدی
1 هفته پیش توسط مهدی مطرح شد
1 پاسخ

تو ریکت نینیو به صفحه Unmatched Route بر میخورم

سلام وقت همه اساتید به خیر
من قبلا یه سایت رو با reactjs نوشتم الان تصمیم دارم که نسخه اندرویدی و ای او اسی رو با react native بنویسم
با یه مشکلی که رو به رو شدم اینه که وقتی ایمیل واسه کاربر فرستاده میشه تو اون یه لینک تاییدیه ایمیل هست

===> قبلا با ریکت روتر اون لینک رو هدایت میکردم به صفحه مربوط به لینک
<Route path="/api/activate/:activation_token" exact element={<ActivationEmail />} />

===> صفحه اکتیویشن ایمیل رو اینجا تو روت فراخوانی میکردم


  const { activation_token } = useParams();
  const [err, setErr] = useState("");
  const [success, setSuccess] = useState("");

  useEffect(() => {
    if (activation_token) {
      const activationEmail = async () => {
        try {
          const res = await Instance({
            url: "/api/activation",
            method: "POST",
            data: { activation_token },
          });
          setSuccess(res.data.msg);
        } catch (err) {
          setErr("EROR");
        }
      };
      activationEmail();
    }
  }, [activation_token]);
  return (
    <div>
      <h2>ACTIVE</h2>
      <h3 className="f5">{err && showErrMsg(err)}</h3>
      <h3 className="f5">{success && showSuccessMsg(success)}</h3>
    </div>
  );
}```

===> **الان من دارم از همون بک اندی که قبل نوشتم استفاده میکنم کد مربوط به rigester کردن کاربر هم به این صورت هستش:**

```  register: async (req, res) => {
    try {
      const { email, password } =
        req.body;

      const passwordHash = await bcrypt.hash(password, 12);

      const newUser = {
        email,
        password: passwordHash,
      };

      const activation_token = createActivationToken(newUser);

      const url = `${CLIENT_URL}/api/activate/${activation_token}`;
      sendMail(email, url);

      res.json({
        msg: "user done",
      });
    } catch (err) {
      return res.status(500).json({ msg: err.message });
    }
  },```

===> **کد بک اند اکتیویشن ایمیل**
```activateEmail: async (req, res) => {
    try {
      const { activation_token } = req.body;
      const user = jwt.verify(
        activation_token,
        process.env.ACTIVATION_TOKEN_SECRET
      );

      const { email,password } =
        user;

      const check = await Users.findOne({ email });
      if (check) return res.status(400).json({ msg: "" });

      const newUser = new Users({
        email,
        password,
      });

      await newUser.save();

      res.json({ msg: "active" });
    } catch (err) {
      return res.status(500).json({ msg: err.message });
    }
  },```

الان اومد از react-router-native استفاده کردم که وقتی کاربر به لینک وارد میشه به اون صفحه هدایت شه و اکانتش فعال شه
ولی موضوعی که هست من به صفحه خطا میخورم
**وقتی رو لینکی که حاوی توکن هستش رو از ایمیلم باز میکنم به صفحه** 
```Unmatched Route
Page could not be found.```
بر میخورم ممنون میشم اگه بتونید راهنماییم کنید که این مشکلمو حل کنم

ثبت پرسش جدید
محمدکیان محمودی چناری
تخصص : دانشجوی مهندسی کامپیوتر
@KEANU2003 6 روز پیش مطرح شد
0

سلام و درود

مشکلت اینه که وقتی لینک تاییدیه ایمیل رو تو برنامه React Native باز می‌کنی، مسیر رو نمی‌شناسه و خطای "Page not found" میده. چند تا راهکار ساده:

  1. هدایت کار به بک‌اند: لینک تو ایمیل رو جوری تنظیم کن که مستقیم بره سمت بک‌اند (مثل /api/activate/:activation_token) و تو بک‌اند کار تایید رو انجام بده. بعد یه پیام تأیید یا خطا نشون بده.

  2. تعریف مسیر تو برنامه React Native: مطمئن شو مسیر /api/activate/:activation_token رو تو روت‌های React Native تعریف کردی. با react-router-native باید همچین چیزی بنویسی:

    <Route path="/api/activate/:activation_token" element={<ActivationEmail />} />
  3. استفاده از Deep Linking: برای اپلیکیشن موبایل باید تنظیمات Deep Linking رو انجام بدی. اینطوری وقتی لینک رو تو ایمیل باز می‌کنی، برنامه React Native باز میشه و مسیر درست رو می‌شناسه.

  4. چک کردن لینک‌ها: مطمئن شو لینکی که تو ایمیل ارسال کردی، مسیرش درسته و به اپلیکیشن دسترسی داره. ممکنه لینک نیاز به تنظیمات بیشتری برای موبایل داشته باشه.

خلاصه، اگه می‌خوای سریع مشکل حل شه، لینک رو بده بک‌اند مدیریت کنه. ولی اگه می‌خوای حرفه‌ای‌تر باشه، Deep Linking راه‌اندازی کن.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام