ဟုတ်ပါတယ်, PHP ဘာသာစကားဖြင့်ရေးသားထားသောဆောင်းပါးသည်သင်တောင်းခံထားသောဆောင်းပါးသည်ယခင်ဆီလျော်သောအစိတ်အပိုင်းများနှင့်အဓိကစာသားများအကြားအလျားလိုက်မျဉ်းကြောင်းကိုထည့်သွင်းထားသည်။
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// ဤစာရွက်စာတမ်းကိုနည်းပညာပိုင်းဆိုင်ရာမျှဝေခြင်းဆောင်းပါးအကြောင်းအရာအတွက်အသုံးပြုသည်,လက်တွေ့မကျပါ Laravel Controller သို့မဟုတ်မော်ဒယ်ကုဒ်</span></span><span>
</span><span><span class="hljs-comment">// ကျေးဇူးပြု. ဤဆောင်းပါးသည်ယုတ္တိဗေဒကိုသက်ဆိုင်ရာစီးပွားရေးယုတ္တိဗေဒသို့လိုက်လျောညီထွေဖြစ်အောင်လုပ်ပါ,login စိစစ်အတည်ပြုလျှင်、အသုံးပြုသူမော်ဒယ်နှင့်အခြားနေရာများ</span></span><span>
</span><span><span class="hljs-comment">// --------------------------------------------</span></span><span>
<span class="hljs-comment">/**
* တည်နေ Laravel စီမံကိန်းတွင်မည်သို့ပေါင်းစည်းရမည်နည်း password_needs_rehash password ပေါ်လစီများ၏အဆင့်မြှင့်ခြင်းနှင့်ပိုကောင်းအောင်အောင်မြင်ရန်?
*
* တည်နေ现代 Web လျှောက်လွှာတွင်,စကားဝှက်စာဝှက်စနစ်မဟာဗျူဟာ၏အဆင့်မြှင့်တင်ခြင်းသည်အသုံးပြုသူအကောင့်လုံခြုံရေးကိုကာကွယ်ရန်သော့ချက်သော့ချက်ဖြစ်သည်。
* PHP ထောက်ပံ့ `password_needs_rehash` 函数可以帮助我们တည်နေ用户登录时无缝地升级密码哈希方式,
* နှင့် Laravel ၎င်းသည်အပြည့်အ 0 စကားဝှက်စစ်ဆေးခြင်းနှင့် encryption ယန္တရားတစ်ခုကိုလည်းထောက်ပံ့ပေးသည်。
* 本文将介绍如何တည်နေ Laravel စီမံကိန်းအတွက်ပေါင်းစည်းမှု `password_needs_rehash` password ပေါ်လစီများ၏အဆင့်မြှင့်ခြင်းနှင့်ပိုကောင်းအောင်အောင်မြင်ရန်。
*
* တစ်、နားလည် password_needs_rehash ၏အခန်းကဏ်။
*
* `password_needs_rehash(string $hash, string|int|null $algo, array $options = []): bool`
* 这个函数၏အခန်းကဏ်။ဟုတ်ကဲ့检查现有的密码哈希ဟုတ်ကဲ့否အသုံးပြု了当前指定的algorithmနှင့်参数。
* လက်ရှိ hash သက်တမ်းကုန်သွားလျှင်(ဥပမာအားဖြင့်, algorithm ကွဲပြားခြားနားသည်,သို့မဟုတ်ကုန်ကျစရိတ် parameters တွေကိုတိုးမြှင့်ခဲ့ကြသည်),ဒီ function ကိုပြန်လာလိမ့်မယ် true。
*
* နှစ်、Laravel ပုံမှန်စကားဝှက်စာဝှက်ခြင်းယန္တရား
*
* Laravel အသုံးပြု `Hash` facade encapsulated Bcrypt နှင့် Argon2 algorithm,ပုံမှန်အားဖြင့် Bcrypt。
* ဥပမာအားဖြင့်,စကားဝှက်စာဝှက်စနစ်ကိုမှတ်ပုံတင်သောအခါပုံမှန်အားဖြင့်ရေးသားလေ့ရှိသည်:
*
* ```php
* $user->password = Hash::make($request->password);
* ```
*
* 验证密码通常တည်နေ Auth 或手动အသုံးပြု:
*
* ```php
* if (Hash::check($request->password, $user->password)) {
* // စကားဝှက်မှန်
* }
* ```
*
* သုံး、တည်နေ登录过程中ဘက်ပေါင်းစုံ password_needs_rehash
*
* 我们可以တည်နေ用户成功登录验证密码之后,rehash လိုအပ်လားစစ်ဆေးပါ,
* လိုအပ်မယ်ဆိုရင်,就အသုံးပြု当前策略重新生成哈希并更新数据库。
*
* နမူနာကုဒ်အတိုင်းအောက်ပါအတိုင်းဖြစ်သည်(可以တည်နေ AuthController သို့မဟုတ်စိတ်ကြိုက် Guard အကောင်အထည်ဖော်):
*
* ```php
* use Illuminate\Support\Facades\Hash;
*
* public function login(Request $request)
* {
* $user = User::where('email', $request->email)->first();
*
* if (! $user || ! Hash::check($request->password, $user->password)) {
* return response()->json(['message' => 'authentication မအောင်မြင်ပါ'], 401);
* }
*
* // စကားဝှက်ကို re-encrypt လုပ်ထားရန်လိုအပ်လားစစ်ဆေးပါ
* if (password_needs_rehash($user->password, PASSWORD_BCRYPT, ['cost' => 12])) {
* $user->password = Hash::make($request->password);
* $user->save();
* }
*
* // အောင်မြင်သော login ပြီးနောက်ယုတ္တိဗေဒ
* return response()->json(['message' => 'အောင်မြင်စွာဝင်ပါ']);
* }
* ```
*
* ဥပမာပြပါ:
* - 这里我们手动အသုံးပြု了 `password_needs_rehash`,နှင့်不ဟုတ်ကဲ့ Laravel encapsulated Hash facade,
* ဘာဖြစ်လို့လဲဆိုတော့ `password_needs_rehash` ဟုတ်ကဲ့ PHP နောက်ခံ function ကို,需要传入明确的algorithm常量နှင့်参数。
* - အထက်ပါဥပမာအတွက်သတ်မှတ်ထားသော `['cost' => 12]` ဟုတ်ကဲ့ bcrypt 的တစ်个安全参数(默认ဟုတ်ကဲ့ 10),သငျသညျသင့်လျော်သောဆာဗာစွမ်းဆောင်ရည်ကိုတိုးတက်အောင်လုပ်နိုင်ပါတယ်。
*
* လေး、ဗဟို Encapsulation Logic,ကုဒ်မိတ္တူကိုရှောင်ပါ
*
* 为了避免တည်နေ多个地方重复写 `password_needs_rehash` တက်ဏဗေဒ,可以将其封装成用户模型中的တစ်个方法:
*
* ```php
* // တည်နေ User.php မော်ဒယ်မှဆက်ပြောသည်
* public function rehashPasswordIfNeeded(string $plainPassword): void
* {
* if (password_needs_rehash($this->password, PASSWORD_BCRYPT, ['cost' => 12])) {
* $this->password = Hash::make($plainPassword);
* $this->save();
* }
* }
* ```
*
* အသုံးပြု时只需要调用:
*
* ```php
* if (Hash::check($request->password, $user->password)) {
* $user->rehashPasswordIfNeeded($request->password);
* // login login ကိုဆက်လုပ်ပါ
* }
* ```
*
* ငါး、မဟာဗျူဟာအဆင့်မြှင့်အတွက်အကောင်းဆုံးအလေ့အကျင့်အကြံပြုချက်များ
*
* 1. **ဗဟိုပြင်ဆင်မှုကုန်ကျစရိတ် parameters တွေကို**:如အသုံးပြု Laravel 配置文件统တစ်管理 bcrypt cost,hard-coded ရှောင်ကြဉ်ပါ。
* 2. **စွမ်းဆောင်ရည် overhead စောင့်ကြည့်လေ့လာခြင်း**:နှင့်အတူ cost ရာထူးတိုးမြှင့်ပေး,စကားဝှက်စစ်ဆေးမှုနှေးကွေးလိမ့်မည်。建议တည်နေ高并发场景下谨慎调整。
* 3. **မိတ်ဆက်ခဲ့သည် Argon2 ထောက်**:Laravel ထောက် Argon2i နှင့် Argon2id,可တည်နေ `config/hashing.php` ဖွင့်。
* 4. **အစုအဝေးတွင်စကားဝှက်**:ပုံမှန်ပြေးနိုင်ပါသည် Job တက်ကြွစွာအသုံးပြုသူများ၏ password hash ကိုတက်ကြွစွာအဆင့်မြှင့်တင်ပါ(မဖြစ်မနေ Non-)。
*
* ခေြာက်、ကောက်ချက်
*
* ဘက်ပေါင်းစုံ `password_needs_rehash` ဟုတ်ကဲ့实现渐进式密码策略升级的有效方式,
* အသုံးပြုသူအတွေ့အကြုံကိုကြားဖြတ်လိမ့်မည်မဟုတ်ပါ,又能确保နှင့်အတူ安全标准的发展保持系统的健壮性。
* အကူအညီနဲ့ Laravel 的灵活性နှင့် PHP နောက်ခံ function ကိုထောက်,ကျွန်ုပ်တို့သည် password Hashing မဟာဗျူဟာကိုဆင့်ကဲပြောင်းလဲမှုနှင့်အကောင်းမြင်မှုကိုအလွယ်တကူအကောင်အထည်ဖော်နိုင်သည်。
*/</span>
</span></span>