پرش به مطلب اصلی

فیلدهای احراز هویت

فیلدهای ورود با Authenticator::userAuthFields() تعریف می‌شوند. هر فیلد از طریق UserAuthField ساخته می‌شود و می‌تواند قوانین اعتبارسنجی، برچسب، و محل استفاده در flowهای مختلف را مشخص کند.

اگر از UI آماده package استفاده کنید، این definitionها مستقیم روی فرم های پیش فرض login و register اثر می‌گذارند. اگر flow سفارشی برای panel یا API بنویسید، همین definitionها باید منبع اصلی validation، تشخیص credential و branching باشند.

مثال پایه

app/Providers/AppServiceProvider.php
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 تعریف شده سازگار است.

پارامترنوعتوضیح
valuestringورودی خام کاربر، مثل شماره موبایل، کد یا ایمیل

خروجی:

  • نام auth field مثل mobile یا code
  • null اگر هیچ field سازگاری پیدا نشود

Authenticator::useAuthField(string $authField): bool

فیلد فعال احراز هویت را برای request جاری تنظیم می‌کند.

پارامترنوعتوضیح
authFieldstringنام فیلدی که باید در ادامه 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 را برمی‌گرداند.

پارامترنوعتوضیح
authFieldstringنام فیلد
defaultarrayمقدار پیش فرض اگر فیلد تعریف نشده باشد

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.

صفحه مرتبط: