是否可以在 Laravel 中創建一次性鏈接?一打開鏈接就過期了?
我創建了一個臨時簽名鏈接,但我可以多次打開它。我該如何反擊?
uj5u.com熱心網友回復:
有這個包可以幫助你
https://github.com/linkkeys-app/signed-url/
這將生成一個 24 小時有效的鏈接,只需單擊一次。
$link = \Linkeys\UrlSigner\Facade\UrlSigner::generate('https://www.example.com/invitation', ['foo' => 'bar'], ' 24 hours', 1);
第一次點擊鏈接時,路線將正常作業。第二次,由于鏈接只有單擊,所以會拋出例外。當然,將 null 而不是 ' 24 hours' 傳遞給 expiry 引數將創建無限期的鏈接。
uj5u.com熱心網友回復:
可能有一個包提供了這樣的功能......在從頭開始構建類似這樣的相當通用的東西之前,總是值得在 Packagelist 上查看。但是,從頭開始構建也不是一件難事。
首先,您需要資料庫持久性,因此創建一個模型和一個名為 UniqueLink 的遷移。在遷移中,您應該包含一個名為“slug”的字串欄位、一個名為 path 的字串欄位和一個名為“used_at”的時間戳欄位。
接下來使用單個 __invoke(string $slug) 方法創建一個控制器。在方法中查找 $link = UniqueLink::where('slug', $slug)->first(); 像這樣更新模型的 used_at 引數 $link->update(['used_at' => Carbon::now()]);
然后回傳一個 redirect()->to($link->path);
像這樣向你的路由檔案添加一個路由 Route::get('/unique-link/{slug}', UniqueLinkController::class);
現在你只需要創建一個方法來將這些鏈接添加到創建一個 slug 的資料庫中(你可以使用來自 Str::uuid() 的 UUID 或者想出更多自定義的東西)和鏈接應該采用的路徑某人。總之,一個非常簡單的功能。
uj5u.com熱心網友回復:
您可以跟蹤 URL 的訪問時間至少一次,如果您真的愿意,可以將其標記為用戶,或者您可以將到期時間縮短到幾分鐘。
URL::temporarySignedRoute( 'foobar', now()->addMinutes(2), ['user' => 100] );
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/485934.html
