سلام دوستان
من برای احراز هویت با کد ملی یک روت ایحاد کردم به اسم 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]
]);
}
}
سلام وقت بخیر ،
1.میدلویر ایجاد شده رو ابتدا باید ثبت کنید داخل فایل kernel.php در بخش روت میدلویرها به این صورت:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
شما باید میدلویر رو ست کنید بر روی روتی که مد نظر داری :
Route::get('/', function () {
return view('panel.index');
})->middleware('auth.admin');
3.کد هم به این صورت هست که اگر سشن ست شده بود اجازه میدی ادامه کارشو بره اگر نه برمیگرده صفحه رجیستر:
if ($request->session()->has('codemeli')) {
return $next($request);
} else {
return redirect('/register');
}
سلام
برای استفاده از session می تونید از session()->flash() استفاده کنید. مزیت این روش اینه که تنها تا route بعدی این session وجود داره تنها کافیه بعد از ارسال form به کنترلر session flash بسازید. می تونید چک کنید که اگر کاربری این session رو نداره 404 fv 'vn,ki sdsjl.
@wxyz
@mohaligateway
ممنون دوست عزیز من هم تو کد بالا از
()session()->flash
استفاده کردم ولی ریدایرکت انجام نمیشه
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
سلام.
بهترین دوست شما در زبان php دستور dd هست، در هر مرحله dd بگیرید، ببینید اصلا اتفاقی میوفته یا نه.
از $validData، یه بار dd بگیرید ببینید اصلا اعتبارسنجی انجام میشه یا نه.
@mohaligateway
@rezajahangir
اگه کد ملی درست باشه ریدایرکت میشه به روت register و همه چیز به درستی کار میکنه
اگه هم غلط باشه تو همین روت registerform باقی میمونه
اینجا اصلا مشکلی نداره
مشکل زمانی هست که من به صورت دستی تایپ میکنم
http://localhost:8000/register
این روت نمایش میده و ریدایرکت نمیشه به registerform
که ابتدا احراز هویت بشه با کدملی بد بره روت register نمایش بده
سلام وقت بخیر ،
شما باید یک میدلویر جدید ایجاد کنید و داخل این میدلویر چک کنید اگر سشنی با نام کد ملی ست شده بود اجازه دسترسی به صفحه رجیستر دارید در غیر این صورت ریدایرکت بشه به صفحه رجیستر فرم .
اصلا این چیزی که شما لازم داری ربطی به کدای این صفحه نداره دستکاریش نکن
@eniack
سلام
ممنون از شما
میدلور ایجاد کردم فقط نمیدونم طرز صحیح نوشتن کد رو
public function handle($request, Closure $next)
{
if($request->session()->has('codemeli'))
{
return redirect(route('register'));
}
else
{
return redirect(route('registerform'));
}
}
سلام وقت بخیر ،
1.میدلویر ایجاد شده رو ابتدا باید ثبت کنید داخل فایل kernel.php در بخش روت میدلویرها به این صورت:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
شما باید میدلویر رو ست کنید بر روی روتی که مد نظر داری :
Route::get('/', function () {
return view('panel.index');
})->middleware('auth.admin');
3.کد هم به این صورت هست که اگر سشن ست شده بود اجازه میدی ادامه کارشو بره اگر نه برمیگرده صفحه رجیستر:
if ($request->session()->has('codemeli')) {
return $next($request);
} else {
return redirect('/register');
}
سلام ممنونم اون مشکل حل شد فقط ثبت نام دیگه انجام نمیشه
این روت درست تعریف شد ؟
Route::middleware(['auth.register'])->group(function(){
Auth::routes(['verify' => true]);
});
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟