从Laravel中的目录为授权用户提供静态JS应用程序



我有一个Js应用程序。它有自己的目录,所需的一切都在该目录中。我现在想在Laravel项目中使用这个应用程序。但它应该只对登录用户可用。现在我不知道该怎么做。我会使用cookie身份验证,但它应该如何工作?如果JS应用程序在公共目录中,它总是开放访问的,并且不能访问csrf令牌。如果它在资源中,我只能在视图中提供单个文件。如何使整个目录可用?目前我只看到一种可能性:

web.php

Route::middleware(['auth:sanctum', 'verified'])->get('/jsapp', function () {
return view("jsapp");
})->name('jsapp');
Route::middleware(['auth:sanctum', 'verified'])->get('/jsapp/{path?}', function (Request $req, $path) {
return serve_file_somehow("path_to_project_root", $path);
});

这个Js应用程序定期轮询服务器,以检查用户是否仍在登录。我的问题是如何实现这个serve_file_somehow功能?或者,对于这种情况,可能还有其他解决方案?有什么.htaccess魔法可以实现吗?

Js应用程序目录结构:

resources/views/jsapp
-- index.html
<html>
<link href="css/styles.css" />
<script src="js/index.js />
</html>
-- css/styles.css
-- js/index.js
-- images/img1.jpg

让我困扰的是,你通过PHP/Laravel重新实现了网络服务器的功能。

您应该通过刀片模板提供index.html文件内容index.blade.php

<html>
<meta name="csrf-token" content="{{ csrf_token() }}">
<link href="/css/styles.css" />
<script src="/js/index.js />
</html>

具有受保护的路由:

Route::middleware(['auth:sanctum', 'verified'])->get('/jsapp', function () {
return view("jsapp.index");
})->name('jsapp');

并将所有javascript和css文件放在public目录中。

也可以通过XSRF-TOKENcookie获取CSRF令牌,Laravel会自动设置该cookie。如果您无法访问resources目录,或者希望将所有JS应用程序都放在一个目录中。那么你也可以使用这个方法。

<script>
$.ajaxSetup({
headers: {
'X-XSRF-TOKEN': $.cookie('XSRF-TOKEN')
}
});
</script>

相关内容