ساخت url های موقت در لاراول temporary Signed Route

زمان مطالعه
5 دقیقهتعداد بازدید
3763تعداد پرسش ها
3برچسب ها :
تکنیک های لاراول
ساخت url های موقت در لاراول temporary Signed Route

زمان مطالعه
5 دقیقهتعداد بازدید
3763تعداد پرسش ها
3برچسب ها :
تکنیک های لاراولساخت url های موقت در لاراول یا temporary Signed Route چه کاربردی دارد؟ آیا می می توانیم از url های خود محافظت کنیم؟ در لاراول چه تمهیداتی برای ایجاد آدرس های موقت و محافظت شده وجود دارد؟
گاهی برای شما هم اتفاق افتاده که نیاز داشته باشید فایل هایی را برای دانلود در سایت خود قرار دهید که دارای آدرس غیر مستقیم باشد یعنی یک آدرس موقت برای فایل مورد نظر تولید کنیم که تا زمانی خاص مثلا 24 ساعت اعتبار داشته باشد. laravel temporary Signed Route برای کمک به تولید این آدرس ها در اختیار ما قرار گرفته است.
این یک بحث جالب هستش و به نظرم اول باید یک سری مقدمات رو برای شما توضیح بدم فرض کنید یک فایل apk برای دانلود روی سایتتون دارید و می خواهید یک url مستقیم براش تولید کنید خب برای ایجاد آدرس https://jobteam.ir/download_app در فایل web.php کد ذیل را ایجاد می کنیم
Route::get('download_app',function (){
$file_path = base_path().'/public/uploads/jobteam.apk';
if (file_exists($file_path)) {
return response()->download($file_path);
} else {
exit('فایل در حال به روز رسانی می باشد و فعلا قابل دانلود نمی باشد.');
}});
این نوع تولید لینک همیشه در دسترس و ثابت می باشد و برای فایل های عمومی بسیار خب می باشد اما اگر یک فایل داشته باشیم که بخواهیم کاربران در صورت درخواست دانلود، مثلا تا 24 ساعت باید دانلود کنند چه کاری باید انجام بدیم؟ خب مسئله یکم پیچیده میشه اما ما در این مطالب از سری مطالب لاراول این موضوع رو آموزش خواهیم داد
ساخت یک آدرس موقت دانلود در لاراول یا laravel temporary Signed Route
مرحله اول افزودن middleware با عنوان signed هستش که از نسخه 5.6.12 به بعد به لاراول اضافه شده است پس مطابق کد ذیل این middleware رو به قسمت protected $routeMiddleware در فایل kernel.php اضافه می کنیم
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
برای اطمینان از افزودن شدن این middleware سعی کنید کش فریم ورک لاراول رو پاک کنید و از اول config کنید.
مرحله دوم ساخت یک کنترلر برای هدایت و ساخت آدرس موقت به اسم FileController می باشد می توانید با استفاده از دستور ذیل یک کنترلر ایجاد کنید
php artisan make:controller FileController
تابعی با عنوان getSignedUrl در این کنترلر ایجاد می کنیم که شناسه یک ردیف از جدول که اطلاعات فایل مورد نظر ما در آن ذخیره شده رو با پارامتر id به این تابع پاس میدیم
public function getSignedUrl($id) {
// add if user by this can download file
return redirect(URL::temporarySignedRoute('UserDownloadFile',now()->addHours(1), ['id' => $id,'user' => Auth::user()->id])); }
دقت کنید ما از temporarySignedRoute برای ایجاد یک آدرس موقت استفاده می کنیم که اولین آرگومان نام مسیر اصلی فایل است دومین آرگومان زمان اعتبار این آدرس است و سومین آرگومان یک آرایه شامل شناسه فایل مورد نظر و شناسه کاربر درخواست دهنده این url می باشد. سپس ما تابع UserDownloadFile در این کنترلر ایجاد می کنیم
public function getFile($id) {
$find=ProductFile::findOrFail($id); // اطلاعات مسیر ذخیره و ... رو از دیتابیس خوندیم
$file_path = base_path().'/public/upload/document/'.$find->link.'/'.$find->name_file;
if (file_exists($file_path)) {
return response()->download($file_path);
} else {
exit('فایل در حال به روز رسانی می باشد و فعلا قابل دانلود نمی باشد.');
}
}
کد کامل این کنترلر به این صورت خواهد بود
namespace App\Http\Controllers\Visitor;
use App\ProductFile; // مدل حاوی اطلاعات فایل
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\URL; // فراخوانی کلاس های ساخت آدرس موقت
class FileController extends Controller
{
public function getSignedUrl($id)
{
// add if user by this can download file
return redirect(URL::temporarySignedRoute('UserDownloadFile',now()->addHours(1), ['id' => $id,'user' => Auth::user()->id]));
}
public function getFile($id)
{
$find=ProductFile::findOrFail($id);
$file_path = base_path().'/public/upload/document/'.$find->link.'/'.$find->name_file;
if (file_exists($file_path))
{
return response()->download($file_path);
}
else
{
exit('فایل در حال به روز رسانی می باشد و فعلا قابل دانلود نمی باشد.');
}
}
}
حالا مسیرهای این متدها به صورت ذیل خواهد بود که من در این مسیرها middleware برای چک کردن لاگین کاربر auth رو هم اضافه کردم
Route::get('file/{id}','Visitor\FileController@getfile')->name('UserDownloadFile')->middleware(['signed','auth']);
Route::get('files/{id}','Visitor\FileController@getSignedUrl')->middleware('auth');
حالا برای دسترسی و دانلود این فایل ها در href لینک مورد نظر کد ذیل رو قرار می دهیم که متغیر id شناسه اطلاعات فایل مورد نظر ماست که در دیتابیس ذخیره شده است.
{{ url('files',['id' => $id]) }}
این کد آدرسی مثل https://jobteam.ir/files/31 در href لینک شما ایجاد خواهد کرد که با مراجعه به این مسیر یک مسیر موقت و هش شده برای شما ایجاد می شود که تا یک ساعت از زمان تولید فرصت دانلود فایل را خواهید داشت. مثال آدرس تولید شده موقت با لاراول
https://jobteam.ir/file/31?expires=1569690642&user=1&signature=00803b155666950e70def455c4d80482bfa9f7b6d7e8bbd70e40c9401f630f82
اگر این آدرس تغییر یا منقضی شود با پیغام Invalid signature 403 پاسخ خواهید گرفت. امیدوارم این آموزش برای تمام دوستداران فریم ورک لاراول جذاب و مفید باشد.


طراحی سایت استارتاپی - ساخت و طراحی تخصصی سایت استارتاپی
امضا الکترونیکی: قوانین و نحوه ساخت آن
طراحی سایت عمرانی و ساختمانی به صورت حرفه ای و اختصاصی

آموزش و دوره پروژه محور انگولار ساخت فروشگاه اینترنتی (پیشرفته)

آموزش ساخت فرم تماس در وردپرس

کمپین گوگل ادز - آموزش ساخت کمپین گوگل ادوردز

آموزش لاراول در دوره جامع پروژه محور ساخت فروشگاه اینترنتی

ساخت دسته بندی بی نهایت در فریم ورک لاراول

آموزش ساخت sitemap (سایت مپ) در فریم ورک لاراول

ساختار مقاله سئو شده

لینک فارسی یا انگلیسی،کدام url در سئو می تواند بهتر باشد؟

سئو سایت فروشگاهی بهمراه چک لیست کامل

سایت مپ نکات و موارد مهم درباره ثبت نقشه سایت در گوگل

پشتیبانی سایت + موارد، هزینه و تعرفه ها

بوم مدل کسب و کار چیست و راهنمای کامل

حذف سشن (session) سبد خرید برگشت از درگاه پرداخت در لاراول

نصب کتابخانه در پایتون

ارجاع دهنده یا منبع ورودی کاربر به سایت شما

استراتژی سئو به زبان ساده

مشکل sql_mode=only_full_group_by در لاراول (laravel)
سلام وقت بخیر ممنون از اموزش من انجام دادم این روش رو وقتی روی لینک دانلود میزنم url برمیگردونه برام مثل همین چیزی که شما نمونه گذاشتید ولی توی صفحه 404 هست لینک دانلود به این شکل باید نوشت؟ دانلود
سلام برای لاراول 7 هم به این شکل عمل میشه یا تغییر کرده؟
آنچنان تغییری نکرده از لینک ذیل میتونید مطالعه کنید