سلام دوستان
من برای احراز هویت با کد ملی یک روت ایحاد کردم به اسم 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
@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'));
}
}شما کنترلری که view صفحه register رو نشون میده دارید دیگه. داخل اون کنترلر می تونید به سادگی شرط رو قرار بدید اگر session valid بود که نمایش بده و گرنه 404 بر گردونه.
@wxyz
سلام ممنونم اون مشکل حل شد فقط ثبت نام دیگه انجام نمیشه
این روت درست تعریف شد ؟
Route::middleware(['auth.register'])->group(function(){
Auth::routes(['verify' => true]);
});