سلام دوستان.
من وقتی میخوام یه کاربر رو لاگین کنم به صورت زیر کدامو نوشتم:
روت:
Route::post('login' , [\App\Http\Controllers\Api\v1\AuthController::class, 'login']);
کنترلر:
public function login(Request $request)
{
$validData = $request->validate([
'phone' => ['required' , 'regex:/^09(1[0-9]|3[1-9]|2[1-9])-?[0-9]{3}-?[0-9]{4}$/' ,'exists:users,phone']
]);
$user = User::wherePhone($validData['phone'])->first();
$code = ActiveCode::generateCode($user);
$user->notify(new ActiveCodeNotification($code , $validData['phone']));
return response()->json($user, 200);
}
Channel:
<?php
namespace App\Notifications\Channels;
use Ghasedak\Exceptions\ApiException;
use Ghasedak\Exceptions\HttpException;
use Illuminate\Notifications\Notification;
class GhasedakChannel
{
public function send($notifiable , Notification $notification)
{
if(! method_exists($notification , 'toGhasedakSms')) {
throw new \Exception('toGhasedakSms not found');
}
$data = $notification->toGhasedakSms($notifiable);
$message = $data['text'];
$receptor = $data['number'];
$apiKey = config('services.ghasedak.key');
try
{
$lineNumber = "10008566";;
$api = new \Ghasedak\GhasedakApi($apiKey);
$api->SendSimple($receptor,$message,$lineNumber);
}
catch(ApiException $e){
throw $e;
}
catch(HttpException $e){
throw $e;
}
}
}
و به درستی هم کار میکنه.
حالا اگه بخوام ثبت نام رو انجام بدم باید کنترلر رو چطور بنویسم، در واقع کد رو چطوری به شماره موبایل مورد نظر ارسال کنم؟
سلام وقت بخیر ،
خب ببینید برای ثبت نام مثلا نام کاربری ایمیل و شماره تماس رو میگیرید ، کاربر فیلدهای مربوطه رو که پر کرد روی دکمه ثبت نام زد
ابتدا کد رو ارسال میکنید به شماره همراه و باید روت رو عوض کنید(کاربر فرستاده میشه به یک ویو دیگه جایی که باید کد ارسالی رو وارد کنه) مثلا فرستاده میشه به
register/verify
شما فیلدهارو بوسیله فلش سشن ارسال میکنید به روت verfy
و اینجا چک میشه اگر کد مربوطه درست بود و برای همین کاربر بود بوسیله مقادیری که با فلش سشن فرستاده شده ثبت نام انجام میشه اگر نه برمیگرده به روت قبلی
@eniack
کدمو به صورت زیر نوشتم:
public function register(Request $request)
{
$validData = $request->validate([
'phone' => ['required' , 'regex:/^09(1[0-9]|3[1-9]|2[1-9])-?[0-9]{3}-?[0-9]{4}$/' ,'exists:users,phone']
]);
$apiKey = config('services.ghasedak.key');
$api = new GhasedakApi($apiKey);
$api->SendSimple(
$validData['phone'],
"Hello World!",
"10008566"
);
return response()->json('OK', 200);
}
الان پیامک ارسال میشه ولی چطور کد تایید رو بفرستم، الان به عنوان تست Hello World رو میفرستم
یه ویو باید بسازید که شامل یک اینپوت هست (همان جایی که کاربر باید کد رو وارد کنه) و در آخر این کنترلر این کد ها رو وراد کنید :
هر مقداری که باید ارسال بشه به روت دیگه رو داخل فلش سشن میزاری مثلا number و کاربر رو میفرستی به روتی که ساختی واسه کد ها
$request->session()->flash('number', $number);
return redirect(route('verify'));
میتونی از طریق encryptString شماره رو انکریپت کنی بعد توی کوکی یا هدر نگه داری و موقع چک کردن کد بیای اونو دیکریپتش کنی و شماره رو چک کنی
حالا نمی دونم روش خوبی هست یا نه فقط به ذهنم رسیده بودش و روی یه پروژه تمرینی زده بودمش
https://websolutionstuff.com/post/how-to-encrypt-and-decrypt-string-in-laravel-8
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟