سلام دوستان.
من سه نوع کاربر دارم: ادمین، دکتر و بیمار.
واسه لاگین کردن کاربر هم میتونه با کدملی لاگین کنه و هم شماره موبایل.
حالا مشکل اینجاس که ادمین و دکتر هم با کدملی و هم با شماره موبایل لاگین میشن ولی بیمار فقط میتونه با شماره موبایل لاگین کنه و وقتی میخوام با کدملی لاگین کنم اجازه ورود نمیده.
اینم از کد مربوط به لاگین کردن:
public function authenticate()
{
$this->ensureIsNotRateLimited();
$inputType = filter_var($this->idNumber, FILTER_VALIDATE_INT) ? 'idNumber' : 'mobile';
if (! Auth::attempt([
$inputType => $this->idNumber,
'password' => $this->password
]));
throw ValidationException::withMessages([
'idNumber' => __('auth.failed'),
]);
}
درود بر شما ،
اروری که باهاش برخورد میکنید رو ضمیمه کنید .
وقتیکه اجازه نمیده دقیقا چه ایرادی از شما میگیره ؟؟
@kian.sdi.0028
این قسمت وقتی کد زیر رو قرار میدم و میخوام با کدملی بیمار لاگین کنم، فقط mobile رو dump میکنه.
if (! Auth::attempt([
dd($inputType)
]));
مقداری که dump میشه:
"mobile"
@kian.sdi.0028
ببینید اگر کاربر ادمین و دکتر باشه به درستی کار میکنه ولی اگه بیمار باشه، بله اشتباه رفتار میکنه
@arminrahmati999
اینجا شما یه if تک خطی داری که داره یه چیزیو فیلتر میکنه.
این تابع به تنهایی خودش از کجا میدونه که این مورد بیماره یا دکتر ؟
احتمالا اون کد ملی خاص که شما امتحان میکنی از این الگو خارجه و مقدار false تعبیر میشه
@kian.sdi.0028
خب چطور در مورد ادمین و دکتر درست کار میکنه ولی واسه بیمار فقط با شماره موبایل باید لاگین کرد؟
مبنای تصمیم گیری کد ملی بودن یا نبودن مقدار رو تغییر بده
function isMelliCode($value)
{
if(!preg_match('/^[0-9]{10}$/',$value))
return false;
for($i=0;$i<10;$i++)
if(preg_match('/^'.$i.'{10}$/',$value))
return false;
for($i=0,$sum=0;$i<9;$i++)
$sum+=((10-$i)*intval(substr($value, $i,1)));
$ret=$sum%11;
$parity=intval(substr($value, 9,1));
if(($ret<2 && $ret==$parity) || ($ret>=2 && $ret==11-$parity))
return true;
return false;
}
اینو امتحان کن .
@kian.sdi.0028
من از از یه پکیج استفاده کردم و الان متوجه شدم که مشکل از پکیج هست، حال یه پکیج دیگه رو تست میکنم و بهتون خبر میدم.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟