使用 laravel 保护 javascript 资源

Posted

技术标签:

【中文标题】使用 laravel 保护 javascript 资源【英文标题】:Secure javascript resources with laravel 【发布时间】:2017-01-17 02:11:05 【问题描述】:

我已经用 laravel 5.2 构建了 rest api,将它与 angularJS 集成并用 jwt 保护它。

这是我第一次使用 jwt,而不是 angularjs,在我过去的项目中(使用 spring mvc/security、angularJS 和 session 而不是 jwt),我可以通过使用 spring security 拦截 url 来保护资源,如下所示:

<sec:intercept-url pattern="*/app/**" access="isAuthenticated()" />

有什么方法可以用 laravel 做到这一点吗?,我已经做了 javascript 验证,所以如果 jwt 令牌无效,用户不能访问任何路由,只能登录,问题是 javascript 源可用任一用户是否已登录。

【问题讨论】:

【参考方案1】:

您可以在路线关闭中执行此操作:

Route::get('script/filename', function($filename)
    return response(file_get_contents(public_path('/assets/js/' . $filename)))->header('Content-Type', 'text/javascript')
)->middleware(['auth']);

虽然这意味着对这个文件的每个请求都需要引导整个应用程序,这会造成很大的性能损失。但是,如果只调用一次,这并不是什么大问题。

旁注 路线关闭有副作用;最大的问题之一是使用闭包时文件无法缓存。

【讨论】:

答案很明确,正是我想要的。用这种方法无法缓存资源让我有点警觉,所以我将评估是否应该混淆和保护文件或只是混淆它。非常感谢。 @PadronLeandro 抱歉,我应该更清楚地了解缓存。它是无法缓存的route file。实际的 javascript 文件当然可以被缓存。要解决前者,请将功能移动到控制器中,然后您也可以缓存路由文件。

以上是关于使用 laravel 保护 javascript 资源的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AngularJS 保护 Laravel 4 中的 API 访问

在 Laravel 中创建模型时使用受保护的 $table 变量

如何使用 Laravel Passport 组织这样的路由保护?

Laravel 多重保护认证失败

如何在 apache vhost 中使用密码保护 Laravel 站点?

使用新模型和保护的 Laravel 身份验证失败:未定义索引:模型