احراز هویت
Authenticator هسته flowهای احراز هویت در access-hub است. اگر بخواهید جریان ورود، ثبت نام، OTP، انتخاب نقش، شخص حقیقی/حقوقی، یا فیلدهای داینامیک کاربر را کنترل کنید، معمولاً نقطه شروع شما همین کلاس است.
در پروژه های panel، flow پیش فرض احراز هویت از خود package وارد پروژه میشود و معمولاً بدون کدنویسی اضافه قابل استفاده است. در پروژه های API هم endpointهای آماده احراز هویت قرار است روی همین abstractionها اضافه شوند. این مستندات برای زمانی است که بخواهید از flow آماده عبور کنید و login، register، OTP یا role selection را خودتان پیاده کنید.
در عمل، این بخش دو لایه دارد:
- متدهای flow محور روی
Authenticatorبرای runtime - helperهای backend برای خواندن definitionها و configهای مرتبط
use Dornica\AccessHub\Authentication\Facades\Authenticator;
$user = Authenticator::user();
از کجا شروع کنیم؟
اگر اولین بار است که با این بخش کار میکنید، این ترتیب معمولاً بهترین نتیجه را میدهد:
- تنظیمات پایه
access-hubرا در Access Hub بررسی کنید. - فیلدهای ورود را در فیلدهای احراز هویت تعریف کنید.
- اگر فرم ثبت نام یا پروفایل شما فیلد تکمیلی دارد، Meta Fields را تعریف کنید.
- اگر پروژه OTP یا verification دارد، OTP و Verification را کا مل کنید.
- در پایان، Session و Role و لاگ های امنیتی را بررسی کنید.
دو روش استفاده
استفاده از Facade
use Dornica\AccessHub\Authentication\Facades\Authenticator;
Authenticator::user();
Authenticator::id();
استفاده از helper
authenticator()->user();
authenticator()->id();
برای flowهای runtime معمولاً Authenticator خواناتر است. برای definitionها و configهای کمکی، helperها انتخاب بهتری هستند.
نقشه کلی قابلیت ها
| بخش | مسئولیت |
|---|---|
| Auth Fields | تعریف این که کاربر با چه فیلدهایی وارد شود |
| Meta Fields | تعریف فیلد های تکمیلی داینامیک برای ثبت نام، ویرایش و نمایش کاربر |
| Authenticated User | دسترسی به کاربر فعلی و بررسی امکان ورود |
| OTP & Verification | ارسال و تایید کدهای یکبار مصرف |
| Roles & Permissions | انتخاب و تغییر نقش فعال کاربر |
| Localization | مدیریت زبان و پرتال در سشن کاربر |
| Login Logs | ثبت ورود موفق، خروج و تلاش ناموفق |
API پیشنهادی
string|null Authenticator::authField()
string|null Authenticator::resolveAuthField(string $value)
bool Authenticator::useAuthField(string $authField)
object Authenticator::user(?object $user = null)
int|null Authenticator::id()
bool Authenticator::canLogin(object $user)
bool Authenticator::isCurrentUserStatusActive()
void Authenticator::sendLoginOtp()
bool Authenticator::verifyLoginOtp(string $code)
array Authenticator::resendLoginOtp()
void Authenticator::logout()
array authFieldNames()
array authFieldDefinitions()
array authFieldDefinition(string $authField, array $default = [])
array registrationAuthFieldDefinitions()
array passwordRecoveryAuthFieldDefinitions()
array userMetaFieldGroups()
array userMetaFields(?PersonType $personType = null)
array authPasswordLength()
string userActivationModel()
Authenticator::authField(): ?string
فیلد auth فعال request جاری را برمیگرداند. اگر هنوز فیلدی تنظیم نشده باشد، اولین login field تعریفشده را به عنوان مقدار پیش فرض انتخاب میکند.
پارامتر:
- ندارد
Authenticator::resolveAuthField(string $value): ?string
مقدار خام ورودی را میگیرد و تشخیص میدهد باید با کدام auth field پردازش شود.
| پارامتر | نوع | توضیح |
|---|---|---|
value | string | مقدار خامی مثل 0912...، email@example.com یا 0012345678 |
Authenticator::useAuthField(string $authField): bool
فیلد فعال را برای ادامه flow تنظیم میکند تا متدهایی مثل findUserByCredential() بدانند با کدام ستون کار کنند.
| پارامتر | نوع | توضیح |
|---|---|---|
authField | string | نام field مثل mobile، email یا code |
چک لیست پروژه جدید
اگر در یک پروژه تازه میخواهید authentication سفارشی را راه بیندازید، این چک لیست معمولاً کافی است:
- کانفیگ
dornica-access-hub.phpرا مرور کنید. userAuthFields()را در Service Provider تعریف کنید.- اگر فرم تکمیلی دارید،
userMetaFields()را هم تعریف کنید. - اگر fieldهای option-based دارید،
optionsرا درcomponentAttributes()بگذارید. - اگر field باید در صفحه show badge شود، از
showAsBadge()وbadgeVariant()استفاده کنید. - اگر OTP دارید،
authentication.otpوregister_verificationرا کامل کنید. - اگر custom controller یا endpoint نوشتهاید، ثبت
recordLogin()،recordFailedLogin()وrecordLogout()را فراموش نکنید.
خطاهای رایج
تعریف اشتباه auth field و meta field
اگر فیلدی برای login لازم است، آن را meta field تعریف نکنید. در این حالت فرم ها ممکن است کار کنند، اما flow احراز هویت ناقص خواهد شد.
نبود options برای فیلدهای option-based
اگر فیلدی مثل radio یا هر فیلد enum-like دارید ولی options تعریف نشده است، فرم میتواند ناقص یا نمایش خروجی انسانی در صفحه show ضعیف شود.
hardcode کردن منطق نمایش داخل Blade
اگر برای هر فیلد مثل gender مستقیماً در view شرط بنویسید، مستند و توسعهپذیر نمیماند. بهتر است نمایش را در خود UserMetaField تعریف کنید.
فراموش کردن person type
در پروژه هایی که legal person فعال است، هر فیلد جدید را از نظر onlyReal() و onlyLegal() بررسی کنید؛ وگرنه فرم ثبت نام یا ویرایش کاربر ناسازگار میشود.
مسیر مطالعه
- برای تعریف فیلد ورود: فیلدهای احراز هویت
- برای فیلدهای داینامیک کاربر: Meta Fields
- برای OTP و reset flow: OTP و Verification
- برای session و role و لاگ ها: Session و Role و لاگ ها