2

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

网页.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-App 定期轮询服务器以检查用户是否仍然登录。我的问题是如何实现此serve_file_somehow功能?或者对于这种情况还有其他解决方案吗?是否有任何可以实现的 .htaccess -magic?

Js-App目录结构:

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 重新实现了 Web 服务器的功能。

4

2 回答 2

1

您应该通过刀片模板提供 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目录中。

于 2020-10-17T12:22:12.467 回答
0

也可以通过自动设置的XSRF-TOKENcookie获取 CSRF 令牌Laravel。如果您无权访问资源目录,或者希望将所有 JS 应用程序放在一个目录中。然后你也可以使用这个方法。

 <script>
    $.ajaxSetup({
        headers: {
            'X-XSRF-TOKEN': $.cookie('XSRF-TOKEN')
        }
    });
 </script>
于 2020-10-17T13:39:58.393 回答