راکت
Paradox
Paradox
توسط Paradox مطرح شد
حل
11 پاسخ

ریدایرکت از طریق سشن ها

سلام دوستان
من برای احراز هویت با کد ملی یک روت ایحاد کردم به اسم registerform که ابتدا کاربران باید کد ملیشون تایید بشه
تا بتونن وارد روت register بشن تا اینجا اکیه
مشکلی که دارم اینه که اگه به صورت دستی تو مرورگر تایپ کنم register وارد روت میشه و ریدایرکتی انجام نمیشه

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

کنترلر registerform

    public function registerform(Request $request)
    {
        $validData = $request->validate([

        'codemeli' => ['required', new Nationalcode],
        'g-recaptcha-response' => ['required' , new Recaptcha]

     ]);

        if($validData){

            $request->session()->flash('codemeli', $validData['codmeli']);
             return redirect(route('register'));
        }
        else
        {
            return redirect('registerform');
        }

    }

register controller

    protected function validator(array $data , Request $request)
    {

        if($request->session()->has('codmeli'))
        {
            return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['nullable','string', 'email', 'max:255', 'unique:users'],
            'phone_number' => 'required|string|unique:users|max:255',
            'codemeli' => ['required', new Nationalcode],
            'courseName' => 'required|string|max:255',
            'password' => ['required', 'string', 'min:8', 'confirmed'],
            'g-recaptcha-response' => ['required' , new Recaptcha]
        ]);
        }

    }

ثبت پرسش جدید
فرشید مرادی
فرشید مرادی
تخصص :noob
@eniack5 سال پیشمطرح شد
0

سلام وقت بخیر ،
1.میدلویر ایجاد شده رو ابتدا باید ثبت کنید داخل فایل kernel.php در بخش روت میدلویرها به این صورت:

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
  1. شما باید میدلویر رو ست کنید بر روی روتی که مد نظر داری :

    Route::get('/', function () {
    
    return view('panel.index');
    })->middleware('auth.admin');

    3.کد هم به این صورت هست که اگر سشن ست شده بود اجازه میدی ادامه کارشو بره اگر نه برمیگرده صفحه رجیستر:

    if ($request->session()->has('codemeli')) {
          return $next($request);
    
      } else {
          return redirect('/register');
      }

Paradox
Paradox
تخصص :در حال یادگیری
@paradox5 سال پیشمطرح شد
0

دوستان اشکال کارم کجاست
ممنون میشم راهنمایی کنید


moha li
moha li
تخصص :توسعه دهنده لاراول و Vue
@mohaligateway5 سال پیشمطرح شد
0

سلام
برای استفاده از session می تونید از session()->flash() استفاده کنید. مزیت این روش اینه که تنها تا route بعدی این session وجود داره تنها کافیه بعد از ارسال form به کنترلر session flash بسازید. می تونید چک کنید که اگر کاربری این session رو نداره 404 fv 'vn,ki sdsjl.
@wxyz


Paradox
Paradox
تخصص :در حال یادگیری
@paradox5 سال پیشمطرح شد
0

@mohaligateway
ممنون دوست عزیز من هم تو کد بالا از
()session()->flash
استفاده کردم ولی ریدایرکت انجام نمیشه


moha li
moha li
تخصص :توسعه دهنده لاراول و Vue
@mohaligateway5 سال پیشمطرح شد
0

registerform بعد از submit کردن اجرا میشه ؟

public function registerform(Request $request)
{
       $this->validate($request,[
        'codemeli' => ['required', new Nationalcode],
        'g-recaptcha-response' => ['required' , new Recaptcha]
       ]);
       $request->session()->flash('codemeli');
       return redirect(route('register'));
}

اگر که validation رد بشه session رو میزنه و به route redirect می کنه.
@wxyz


رضا جهانگیر
رضا جهانگیر
تخصص :Full-Stack Developer
@rezajahangir5 سال پیشمطرح شد
0

سلام.
بهترین دوست شما در زبان php دستور dd هست، در هر مرحله dd بگیرید، ببینید اصلا اتفاقی میوفته یا نه.
از $validData، یه بار dd بگیرید ببینید اصلا اعتبارسنجی انجام میشه یا نه.


Paradox
Paradox
تخصص :در حال یادگیری
@paradox5 سال پیشمطرح شد
0

@mohaligateway
@rezajahangir
اگه کد ملی درست باشه ریدایرکت میشه به روت register و همه چیز به درستی کار میکنه
اگه هم غلط باشه تو همین روت registerform باقی میمونه
اینجا اصلا مشکلی نداره

مشکل زمانی هست که من به صورت دستی تایپ میکنم
http://localhost:8000/register
این روت نمایش میده و ریدایرکت نمیشه به registerform
که ابتدا احراز هویت بشه با کدملی بد بره روت register نمایش بده


فرشید مرادی
فرشید مرادی
تخصص :noob
@eniack5 سال پیشمطرح شد
0

سلام وقت بخیر ،
شما باید یک میدلویر جدید ایجاد کنید و داخل این میدلویر چک کنید اگر سشنی با نام کد ملی ست شده بود اجازه دسترسی به صفحه رجیستر دارید در غیر این صورت ریدایرکت بشه به صفحه رجیستر فرم .
اصلا این چیزی که شما لازم داری ربطی به کدای این صفحه نداره دستکاریش نکن


Paradox
Paradox
تخصص :در حال یادگیری
@paradox5 سال پیشمطرح شد
0

@eniack
سلام
ممنون از شما
میدلور ایجاد کردم فقط نمیدونم طرز صحیح نوشتن کد رو

    public function handle($request, Closure $next)
    {
      if($request->session()->has('codemeli'))
        {
         return redirect(route('register'));
        }
        else
        {
          return redirect(route('registerform')); 
        }
    }

فرشید مرادی
فرشید مرادی
تخصص :noob
@eniack5 سال پیشمطرح شد
0

سلام وقت بخیر ،
1.میدلویر ایجاد شده رو ابتدا باید ثبت کنید داخل فایل kernel.php در بخش روت میدلویرها به این صورت:

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
  1. شما باید میدلویر رو ست کنید بر روی روتی که مد نظر داری :

    Route::get('/', function () {
    
    return view('panel.index');
    })->middleware('auth.admin');

    3.کد هم به این صورت هست که اگر سشن ست شده بود اجازه میدی ادامه کارشو بره اگر نه برمیگرده صفحه رجیستر:

    if ($request->session()->has('codemeli')) {
          return $next($request);
    
      } else {
          return redirect('/register');
      }

moha li
moha li
تخصص :توسعه دهنده لاراول و Vue
@mohaligateway5 سال پیشمطرح شد
0

شما کنترلری که view صفحه register رو نشون میده دارید دیگه. داخل اون کنترلر می تونید به سادگی شرط رو قرار بدید اگر session valid بود که نمایش بده و گرنه 404 بر گردونه.
@wxyz


Paradox
Paradox
تخصص :در حال یادگیری
@paradox5 سال پیشمطرح شد
0

@eniack

سلام ممنونم اون مشکل حل شد فقط ثبت نام دیگه انجام نمیشه
این روت درست تعریف شد ؟

Route::middleware(['auth.register'])->group(function(){
Auth::routes(['verify' => true]);
});

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

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