Paradox
3 سال پیش توسط 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
@eniack 3 سال پیش آپدیت شد
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 3 سال پیش مطرح شد
0

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


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

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


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

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


moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش آپدیت شد
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
@rezajahangir 3 سال پیش مطرح شد
0

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


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

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

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


فرشید مرادی
تخصص : noob
@eniack 3 سال پیش آپدیت شد
0

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


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

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

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

فرشید مرادی
تخصص : noob
@eniack 3 سال پیش آپدیت شد
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
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش آپدیت شد
0

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


Paradox
تخصص : در حال یادگیری
@paradox 3 سال پیش آپدیت شد
0

@eniack

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

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

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

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