negar_a 1 گزارش دادن ارسال شده در خرداد 99 سلام دوستان. من تو پروژه ام میخوام قسمت auth و ثبت نام رو تغییر بدم . بعنوان مثال فیلدهایی به جدول user اضافه کردم : phone , address,city,postCode . در مرحله ی اول میخوام کاربر اینها رو فقط پر کنه : name , emaile ,password,phone و بعد از اینکه کدی به موبایلش ارسال شد و کاربر درست وارد کرد بعد از اون ثبت ، لاگین و ریدایرکت اتفاق بیفته . و در مراحل بعد مابقی اطلاعات مثل ادرس و ... رو پر کنه کلیت کار اینه اما نمیدونم جطور و کدوم قسمت کدهای رو ویرایش کنم . مثلا در registreController چه تغییری ایجاد کنم که بعد از چک کردن phone اطلاعات رو ذخیره کنه . احتمالا باید middleware بسازم درسته ؟ ممنون میشم راهنمایی کنید . نقل قول Share this post Link to post Share on other sites
Special_One 57 گزارش دادن ارسال شده در خرداد 99 سلام وقت بخیر دوست گرامی برای تایید با شماره تلفن شما باید ابتدا در جدول کاربران یک فیلد اضافه کنید . در این فیلد بعد از ثبت نام یک کد رندم تولید کنید و در اون ذخیره کنید . در قسمت بعد ثبت نام بعد از وارد کردن شماره تماس کد رندوم داخل جدول توسط پنل پیامک به کاربر ارسال میشود و باید چکشود آیا صحیح است یا خیر . موفق باشید. 1 نقل قول Share this post Link to post Share on other sites
negar_a 1 گزارش دادن ارسال شده در خرداد 99 ممنون. فکر میکردم پیچیده تر از اینها باشه. پس به پکیجی مثل nexmo نیازی نیست ؟ و از طرفی اگر کاربر کد تایید رو وارد نکرد ، بهتره هر چند ساعت یکبار رکوردهای اضافی حذف بشوند با کرون جاب ؟ نقل قول Share this post Link to post Share on other sites
negar_a 1 گزارش دادن ارسال شده در خرداد 99 و یک مساله دیگه اینه که وقتی از سیستم خود uath استفاده کنم ، وقتی اطلاعات اولیه مثل موبایل نام پسورد وارد میشه ، در پایگاه یک رکورد درج شده و در نتیجه لاگین اتفاق میفته . ایا منطقی هست که قبل از تایید کد ، کاربر لاگین بشه ؟ اینو چطور تغییر بدم ؟ نقل قول Share this post Link to post Share on other sites
Amir_Kh1984 17 گزارش دادن ارسال شده در خرداد 99 سلام در صورتیکه بخواهید فیلد phome به جدول users اضافه کنید باید متغیر fillable$ در کلاس User را بصورت زیر اصلاح کنید. protected $fillable = [ 'name', 'email', 'password', 'phone' ]; سپس وارد کلاس App\Http\Controllers\Auth\RegisterController شوید و متد ()create را ویرایش کنید: return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'phone' => $data['family'], ]); نیازی به استفاده از میان افزار Midlleware نیست.اصولا زمانی که بخواهید شرایط خاصی را بررسی کنید از میان افزار استفاده می کنید. برای مثال اگر شما بخواهید کاربران سایت شما در مدت زمان یک ساعت فقط یک دیدگاه برای یک پست خاص ارسال کنند می توانید از یک میان افزار به نام AllowComment بصورت زیر استفاده کنید: namespace App\Http\Middleware; use Carbon\Carbon; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class AllowComment { public function handle($request, Closure $next) { if (auth()->check()) { //dd($request->post_id); $post_id = $request->post_id; $max_count =1; $max_time = 60; $first = Carbon::now()->subMinutes($max_time); $count = auth()->user()->comments() ->where('post_id', $post_id) ->where('created_at', '>=', $first)->count(); if ($count < $max_count) return $next($request); } $msg ='your error message'; return redirect()->back()->with('invalid', $msg); } } امیدوارم که این پاسخ به شما کمک کرده باشد. موفق باشید. 1 نقل قول Share this post Link to post Share on other sites
negar_a 1 گزارش دادن ارسال شده در خرداد 99 ممنون برای اینهمه کد . بیشتر سوالاتم درک منطق هست . مثلا اینکه نیازی هست کد تایید هم مثلا با نام verify در دیتابیس ذخیره بشه یا فقط در سشن کافیه ؟ کد کپچا بهتره در کدوم مرحله باشه ؟ ثبت نام من دو مرحله ای هست ، مرحله ی اول نام موبایل پسورد .... مرحله دوم ادرس شهر و ... اون max_time برای زمانی هست که کاربر فرصت وارد کردن کد تایید رو داره . درسته ؟ نقل قول Share this post Link to post Share on other sites
Amir_Kh1984 17 گزارش دادن ارسال شده در خرداد 99 در مرحله اول ثبت نام شما باید نام، موبایل و ایمیل را از کاربر دریافت کنید تا ثبت نام انجام شود. کد تایید ثبت نام هم بصورت تصادفی ایجاد و در یک session ذخیره می شود. در انتهای متد ()create در کلاس RegisterController نشست را ایجاد نمایید. یک session با نام user-xxx و مقدار موبایل کاربر ایجاد می شود.(xxx شناسه (id) کاربر است) protected function create(array $data) { $user = User::create([ 'name' => $data['name'], 'phone' => $data['phone'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); session()->put('user-' . $user->id, $data['phone']); return $user; } حال کاربر باید کد تایید را در فرم مربوطه وارد نمایید. فرض بر آن است که مسیر (Route) مربوطه را در فایل web.php بصورت زیر تعریف کرده باشید. Route::get('/register/verify/{user}', 'UserController@verify')->middleware('check-verify')->name('register.verify'); در میان افزار CheckVerify باید بررسی کنید که آیا کاربر در مدت زمان لازم کد تایید را وارد کرده یا خیر. با اندکی تغییر در کد قبلی (تابع ()handle ) می توانید این کار را انجام دهید. پیشنهاد می کنم که خودتان کد نویسی کنید تا مفاهیم را بهتر یاد بگیرید. موفق باشید. 1 نقل قول Share this post Link to post Share on other sites
negar_a 1 گزارش دادن ارسال شده در خرداد 99 من کد middleware رو به این شکل نوشتم . میخوام وقتی کاربر وارد صفحه ی وارد کردن کد تایید شد ، اگر بیش از شصت ثانیه زمان برد ریدایرکت بشه . ولی کد کار نمیکنه . ( بنظرم در اینجا میشه به جای زمان create_at از زمان فعلی هم استفاده کرد . درسته ؟) public function handle($request, Closure $next) { if (auth()->check()) { $expire_verify =date('H:i:s', strtotime('+60 second')); if(date('H:i:s')>$expire_verify){ $msg ='your error message'; return redirect()->back()->with('invalid', $msg); } } return $next($request); } اسم این صفحه ای که کاربر کد تایید وارد میکنه check-code هست و من middleware رو به همین صفحه اختصاص دادم . نقل قول Share this post Link to post Share on other sites