فیلدهای احراز هویت
فیلدهای ورود با Authenticator::userAuthFields() تعریف میشوند. هر فیلد از طریق UserAuthField ساخته میشود و میتواند قوانین اعتب ارسنجی، برچسب، و محل استفاده در flowهای مختلف را مشخص کند.
اگر از UI آماده package استفاده کنید، این definitionها مستقیم روی فرم های پیش فرض login و register اثر میگذارند. اگر flow سفارشی برای panel یا API بنویسید، همین definitionها باید منبع اصلی validation، تشخیص credential و branching باشند.
مثال پایه
use Dornica\AccessHub\Authentication\Authenticator;
use Dornica\AccessHub\Authentication\Builders\UserAuthField;
private function setAuthFields(): void
{
Authenticator::userAuthFields([
UserAuthField::code()
->label('code')
->rules([
'required',
'string',
'persian_not_accept',
'min:10',
'max:11',
])
->useInLogin()
->useInRegistration(),
UserAuthField::mobile()
->label('mobile')
->rules([
'required',
'string',
])
->useInForgetPassword(),
]);
}
فلگ های مهم UserAuthField
| متد | کاربرد |
|---|---|
useInLogin() | فیلد در جریان ورود استفاده میشود |
useInRegistration() | فیلد در فرم ثبت نام نمایش داده میشود |
useInForgetPassword() | فیلد برای بازیابی رمز استفاده میشود |
در useInForgetPassword() فقط mobile یا email معتبر است. برای سایر فیلدها خطای InvalidArgumentException خواهید گرفت.
API پیشنهادی برای custom flow
string|null Authenticator::authField()
string|null Authenticator::resolveAuthField(string $value)
bool Authenticator::useAuthField(string $authField)
bool Authenticator::isRegistrationEnabled()
array authFieldNames()
array authFieldDefinitions()
array authFieldDefinition(string $authField, array $default = [])
array registrationAuthFieldDefinitions()
array passwordRecoveryAuthFieldDefinitions()
Authenticator::resolveAuthField(string $value): ?string
ورودی خام کاربر را میگیرد و تشخیص میدهد این مقدار با کدام auth field تعریف شده سازگار است.
| پارامتر | نوع | توضیح |
|---|---|---|
value | string | ورودی خام کاربر، مثل شماره موبایل، کد یا ایمیل |
خروجی:
- نام auth field مثل
mobileیاcode nullاگر هیچ field سازگاری پیدا نشود
Authenticator::useAuthField(string $authField): bool
فیلد فعال احراز هویت را برای request جاری تنظیم میکند.
| پارامتر | نوع | توضیح |
|---|---|---|
authField | string | نام فیلدی که باید در ادامه flow مبنا قرار بگیرد |
authFieldDefinitions(): array
همه definitionهای auth field را برمیگرداند.
پارامتر:
- ندارد
مناسب برای:
- ساخت validation rule به صورت داینامیک
- ساخت schema فرم login یا register
- بررسی flagهایی مثل
use_in_loginیاuse_in_registration
authFieldDefinition(string $authField, array $default = []): array
تعریف کامل یک auth field را برمیگرداند.
| پارامتر | نوع | توضیح |
|---|---|---|
authField | string | نام فیلد |
default | array | مقدار پیش فرض اگر فیلد تعریف نشده باشد |
registrationAuthFieldDefinitions(): array
فقط fieldهایی را برمیگرداند که برای registration فعال شدهاند.
پارامتر:
- ندارد
passwordRecoveryAuthFieldDefinitions(): array
فقط fieldهایی را برمیگرداند که برای forgot password فعال شدهاند.
پارامتر:
- ندارد
سناریوی واقعی: custom login در API
use Dornica\AccessHub\Authentication\Facades\Authenticator;
use Illuminate\Validation\ValidationException;
$loginInput = request('login');
$authField = Authenticator::resolveAuthField($loginInput);
if (! $authField) {
throw ValidationException::withMessages([
'login' => 'نوع فیلد ورود قابل تشخیص نیست.',
]);
}
Authenticator::useAuthField($authField);
$rules = authFieldDefinition($authField)['rules'] ?? ['required', 'string'];
validator([$authField => $loginInput], [
$authField => $rules,
])->validate();
سناریوی واقعی: custom register برای panel
اگر نمیخواهید از فرم ثبت نام آماده package استفاده کنید، میتوانید fieldهای مجاز را از definitionها بخوانید و فرم خودتان را بسازید:
$registerFields = registrationAuthFieldDefinitions();
این کار معمولاً برای این سناریوها مفید است:
- فرم ثبت نام چندمرحلهای
- endpoint سفارشی برای SPA
- ثبت نامی که بخشی از fieldها را از سیستم دیگری میگیرد
چه چیزی auth field نیست؟
اگر فیلدی فقط برای پروفایل، ثبت نام، یا نمایش اطلاعات کاربر است و در login نقش مستقیمی ندارد، بهتر است آن را به عنوان meta field تعریف کنید، نه auth field.
صفحه مرتبط: