۱۴ Mahdi
خطا در redirect شدن
جامعه لاراول ایجاد شده در ۲۷ اسفند ۱۴۰۱

مثل مرحله قبل تایید کد و فعال کردن احراز هویت ۲ مرحله ای

هنگام redirect ب مشکل میخورم

مثل استاد متد جدید برای ریدایرکت شدنمون تعریف کردم و درون if گذاشتمش مشکل اینجا و به خط این متد میرسه بجای رفتن اون روت صفحه ریلود میشه

        if ($user->hasTwoFactor()) {
            $this->twoFactor->requestCode($user);
            return $this->sendHasTwoFactorResponse();
        }
    public function sendHasTwoFactorResponse()
    {
        return redirect()->route('auth.login.code');
    }

مهدی عزیز

نام روت رو درست وارد کردی؟

9029-سون-لرن (3).png

احمدرضا فاطمی کیا ۲۷ اسفند ۱۴۰۱، ۱۳:۵۲

بله

Mahdi ۲۷ اسفند ۱۴۰۱، ۱۳:۵۴

یک dd از متد خارج شرط بگیر ببین درست اجرا میشه.

احمدرضا فاطمی کیا ۲۷ اسفند ۱۴۰۱، ۱۴:۱۹

چند حالت رو بررسی کردم اول ی dd گرفتم از روتم تو شرط

        if ($user->hasTwoFactor()) {
            $this->twoFactor->requestCode($user);
            // return $this->sendHasTwoFactorResponse();
            dd($this->sendHasTwoFactorResponse());
        }

result ش کاملا درسته

Illuminate\\Http\\RedirectResponse {#410 ▼ // app\\Http\\Controllers\\Auth\\AuthenticatedSessionController.php:44
  +headers: Symfony\\Component\\HttpFoundation\\ResponseHeaderBag {#1440 ▶}
  #content: """
    html>\\n
    <html>\\n
        <head>\\n
            <meta charset="UTF-8" />\\n
            <meta http-equiv="refresh" content="0;url='http://127.0.0.1:8000/auth/login/code'" />\\n
    \\n
            <title>Redirecting to http://127.0.0.1:8000/auth/login/codetitle>\\n
        head>\\n
        <body>\\n
            Redirecting to <a href="http://127.0.0.1:8000/auth/login/code">http://127.0.0.1:8000/auth/login/codea>.\\n
        body>\\n
    html>
    """
  #version: "1.0"
  #statusCode: 302
  #statusText: "Found"
  #charset: null
  #targetUrl: "http://127.0.0.1:8000/auth/login/code"
  #request: Illuminate\\Http\\Request {#43 ▶}
  #session: Illuminate\\Session\\Store {#386 ▶}
  +original: null
  +exception: null
}

بیرون شرطم dd گرفتم

        if ($user->hasTwoFactor()) {
            $this->twoFactor->requestCode($user);
        }
        dd($this->sendHasTwoFactorResponse());

نتیجه یکسان

ولی در حالت return

        if ($user->hasTwoFactor()) {
            $this->twoFactor->requestCode($user);
            // return $this->sendHasTwoFactorResponse();
            // dd($this->sendHasTwoFactorResponse());
        }
        return $this->sendHasTwoFactorResponse();

داستان همونه

کدامو زیر میزارم بیزحمت ی بررسی شون کن

Mahdi ۲۷ اسفند ۱۴۰۱، ۱۴:۳۰

لینک پروژه

https://uupload.ir/view/login_amp_register_3_bwnh.rar/
Mahdi ۲۷ اسفند ۱۴۰۱، ۱۴:۳۴

اینطور که معلومه مشکل از بعد ریدایرکته

به شکل زیر تغییر بدید نشد بررسی کنم:

if ($user->hasTwoFactor()) {
            $this->twoFactor->requestCode($user);
            // return $this->sendHasTwoFactorResponse();
            $this->sendHasTwoFactorResponse();
exit();
        }
احمدرضا فاطمی کیا ۲۷ اسفند ۱۴۰۱، ۱۶:۱۴

انجام دادم تغیری حاصل نشد



Mahdi ۲۷ اسفند ۱۴۰۱، ۱۶:۱۸

مهدی عزیز

من بررسی کردم متد ریدایرکت در اینجا باید اکو بشه تا خروجی رو موظف به اجرا کنیم:

public function sendHasTwoFactorResponse()
{
   echo redirect()->route('auth.login.code');
}
احمدرضا فاطمی کیا ۲۸ اسفند ۱۴۰۱، ۰۶:۰۱
echo

هم جواب نیست احمدرضا جان

Mahdi ۲۸ اسفند ۱۴۰۱، ۰۶:۵۰

چندین بار بررسی کردم اوکی بود با این روش.

جایی هم که متد رو صدا زدی باید اکو کنی.

دیباگ خط به خط انجام بده احتمالا جای دیگه هم اشتباهی کردی.

احمدرضا فاطمی کیا ۲۸ اسفند ۱۴۰۱، ۰۹:۲۲

احمد جان الان اشتباه من کجا بود ؟


Mahdi ۲۸ اسفند ۱۴۰۱، ۱۲:۰۳

پروژه از صفر نوشتم به اینجا ک میرسیم بازم همین داستانه

شاید چون کدهای breeze تغیر دادم این مشکل پیش میاد

تغیراتی ک من انجام دادم این بود

در متد authenticate فرم ریکوئست اومدم Auth::attempt به Auth::validate تغیر دادم

و بعد کارهایی ک استاد گفت رو انجام دادم و چیزی ک هست echo برای نمایش وچیزی رو به ما بر نمیگردونه پس استفاده از echo کاملا غلطه



Mahdi ۲۸ اسفند ۱۴۰۱، ۱۹:۵۵

سلام مهدی جان، لطفا سورس کدتون رو روی گیتهاب قرار بدید و لینکش رو اینجا بفرستید تا بررسی کنم.

لطفا یکبار دیگه هم دقیق مشکلتون رو مطرح کنید تا باهم حلش کنیم.

صادق برزگر ۲۹ اسفند ۱۴۰۱، ۱۳:۰۱

سلام اقای برزگر عزیر

سورس پروژه

https://github.com/mehdi-1995/two-factor

مشکل من از جایی شروع ک اتصال برقرار کردم بین two-factor مون با سرویس احراز هویتمون

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

استاد اومدن بجای attempt از validate روی facad Auth استفاده کردن

منم همینکار رو کردم بدون هیچ مشکل

در مرحله بعد یوزر رو find کردیم ک بازم همه چی اوکی بود

تا موقعی ک میرسیم به این شرط

        if ($user->has_two_factor) {
            $this->twoFactor->generateCode($user);
            return $this->sendHasTwoFactorResponse();
        }

جایی ک یوزر رو پاس میدیم به این روت

    public function sendHasTwoFactorResponse()
    {
        return redirect()->route('auth.login.showCodeForm');
    }

صفحه لاگین ما مجددا Reload میشه

و بقیه کد اجرا نمیشه

Mahdi ۲۹ اسفند ۱۴۰۱، ۱۴:۵۰