Javascript 限制查看器js url在未登录的情况下访问文件

Javascript 限制查看器js url在未登录的情况下访问文件,javascript,php,fat-free-framework,Javascript,Php,Fat Free Framework,如果用户未登录,我需要限制从服务器访问文件 我正在使用ViewerJS预览文件,只需输入url即可从服务器访问上传的文件 http://localhost/gbdportal-new/ViewerJS/#../uploads/2138970950.pdf 我尝试在用户点击该路线时执行检查: $f3->route('GET ViewerJS/*', function() { /* if user not logged in.. no access */ }); 但是vie

如果用户未登录,我需要限制从服务器访问文件

我正在使用ViewerJS预览文件,只需输入url即可从服务器访问上传的文件

http://localhost/gbdportal-new/ViewerJS/#../uploads/2138970950.pdf
我尝试在用户点击该路线时执行检查:

$f3->route('GET ViewerJS/*', function()
{
    /* if user not logged in.. no access
    */
});
但是viewerJS直接渲染文件,而不经过这个路由检查[我猜]

如何防止用户在未登录的情况下访问该文件


非常感谢您的帮助。谢谢。

根据您的服务器配置,如果您的服务器检测到请求的URL是一个文件,它将直接获取该文件,而不会执行您的代码

最好的方法是在PHP代码中创建一个新的路由,检查用户是否已连接,然后打开文件将其发送到客户端

代码看起来像

$f3->route('GET getFile/@file', function()
{
    if( /*the user is logged in*/){
        $fileName = $f3->get('PARAMS.file')

        header("Content-type:application/pdf");

        readfile("uploads/$file.pdf");
    }else{
        //return a 403 error
    }
});
现在你可以把
http://localhost/gbdportal-new/ViewerJS/#../getFile/2138970950
,除非用户登录,否则无法获取文件


我希望我回答了你的问题,祝你有一个愉快的一天

PHP不关心
#
或之后的任何事情。实际路径就是
/gbdportal new/ViewerJS/
,不管您在
#
后面放了什么。如果删除
*
,会怎么样?您以前似乎也有路径段。尝试了
$f3->route('GET gbdportal news/ViewerJS/',函数()
?是的。是一样的。你以前用过viewerJS吗?我看了文档,如果我理解正确,它会获取包含“#…”部分后面URL的文件,因此如果你使用
http://localhost/gbdportal-new/ViewerJS/#../getFile/2138970950
它实际上会在
http://localhost/gbdportal-new/getFile/2138970950
因此执行PHP代码并执行身份验证,对吗?web服务器不会将该URL转换为真实的文件路径(nether会使用PHP),因为它使用哈希指向实际文件。web服务器仅检查文件夹
ViewerJS
是否存在(因为这是实际URL的最后一部分)。因此OP试图保护使用ViewerJS的实际URL。我知道自动执行此操作的不是服务器,而是JsViewer使用该散列然后检索内容,如果您在JsViewer示例页面的控制台中查看,则代码
加载JsViewer,然后JSVEWER获取文件
/demo/ohm2013.odp
如果您将该文件隐藏在PHP控制器后面,它将允许您控制其访问。