لاراول ۱۳.۹: قوانین پسورد رو مستقیم به مرورگر بده!
خلاصهٔ کاملتر
لاراول ۱۳.۹ با یه قابلیت مفید برای فرمهای ثبتنام اومده: متد toPasswordRulesString() روی کلاس Password. این متد قوانینی که برای اعتبارسنجی سمت سرور تعریف کردی رو به فرمت استاندارد passwordrules تبدیل میکنه — یه attribute که اپل معرفی کرده و مرورگرها و مدیران پسورد مثل Safari، ۱Password و Bitwarden ازش میخونن تا رمز معتبری پیشنهاد بدن. دیگه کاربر مجبور نیست چند بار رمز بزنه تا ببینه با قوانین سایت جور درمیاد یا نه.
بهترین حالت اینه که از Password::defaults() استفاده کنی تا یه بار سیاست رمزت رو در AppServiceProvider تعریف کنی و هم validation سمت سرور هم attribute سمت HTML از همون منبع بخورن:
// app/Providers/AppServiceProvider.php
Password::defaults(fn () => Password::min(12)->max(64)->mixedCase()->numbers()->symbols());بعدش توی HTML فرم، مقدار attribute رو مستقیم از همون تعریف میگیری:
<input
type="password"
autocomplete="new-password"
passwordrules="{{ Password::defaults()->toPasswordRulesString() }}"
/>یه قابلیت مهم دیگه اضافه شدن پشتیبانی از ذخیرهسازی payload های بزرگ SQS روی دیسک هست. SQS حداکثر ۱ مگابایت اجازه میده و اگه جابت بزرگتر باشه، AWS ارور میده. حالا میتونی با فعال کردن extended_store_options در تنظیمات، payload رو روی S3 یا هر دیسک دیگهای ذخیره کنی و فقط یه pointer کوچیک از SQS رد بشه. این قابلیت opt-in هست و به کاربران فعلی تاثیری نمیزنه.
Concurrency::run() هم حالا پارامتر timeout داره. قبلاً timeout پیشفرض ۶۰ ثانیه بود و راهی برای تغییرش از این متد وجود نداشت. با اضافه شدن این پارامتر میتونی برای تسکهای سنگینتر زمان بیشتری بدی، مثلاً Concurrency::run([...], timeout: 300).
اینترفیس جدید PreparesForDispatch هم یه hook قبل از dispatch جاب به صف اضافه میکنه. متد prepareForDispatch() میتونه false برگردونه تا dispatch لغو بشه — مثلاً وقتی میخوای قبل از ارسال به صف، آیتمهای تکراری رو حذف کنی یا چک کنی که اصلاً نیازی به اجرای جاب هست یا نه. همچنین PendingDispatch حالا متدهای when() و unless() هم داره که میشه مستقیم روی dispatch chain استفاده کرد.
نکات کلیدی:
Password::toPasswordRulesString()قوانین اعتبارسنجی رو به attribute قابلخواندن توسط مرورگر تبدیل میکنه- پشتیبانی از ذخیره payload های بزرگ SQS روی دیسک (S3 و غیره) با
extended_store_options Concurrency::run()حالا پارامترtimeoutقابل تنظیم داره- اینترفیس
PreparesForDispatchبرای hook زدن قبل از ارسال جاب به صف PendingDispatchحالاwhen()وunless()داره- متد
foreignUuidFor()برای تعریف صریح کلید خارجی UUID در migrations ThrottlesExceptions::backoff()حالا Closure میپذیره تا بتونی backoff رو بر اساس محتوای exception تعیین کنی




