仅通过Auth Middleware和基于令牌的身份验证访问存储文件夹中的文件

Pan*_*kaj 5 php laravel laravel-5 laravel-5.1 laravel-5.2

我在Laravel网站上有以下文件夹.

/存储/资产/媒体

此文件夹可以包含以下信息

/storage/Asset/Media/1/abc.png

/storage/Asset/Media/2/abc.png

这里1或2是文件夹名称.

我有以下代码来保护文件夹,以便没有人可以访问该文件夹而无需身份验证

Route::group(['middleware' => ['web', 'auth']], function () {
    Route::get('/storage/Asset/Media/{ID}/{eded}', array(
        'as' => 'Files',
        'uses' => 'User\Account\Media\MediaController@DownloadMedia',
    ));
});
Run Code Online (Sandbox Code Playgroud)

因此,在用户的会话未在浏览器中过期之前,没有人可以访问这些文件.

问题出现在Android中,因此现在没有人可以访问由于Auth Middleware而导致的文件.

有人可以建议这样的方法,可以通过基于令牌的身份验证(通过Android)和使用Auth Controller(通过网站)下载文件吗?

Gie*_*šys 6

您不需要使用任何其他配置routes.php,如果您按照本指南操作,一切都会正常工作:

最简单的解决方案是创建一个名为列api_tokenusers表.然后,当尝试从Android设备访问资源时,只需添加?api_token=<token>到您的URL,其中<token>api_token您的users表中的列.

例如: domain.com/storage/Asset/Media/1/2?api_token=123hello4secret

系统将尝试搜索用户记录api_token == 123hello4secret,因此只需将其123hello4secret放入您的用户api_token字段即可.


如果你想知道为什么你应该api_token作为列名,答案就在这里:https://github.com/laravel/framework/blob/2a38acf7ee2882d831a3b9a1361a710e70ffa31e/src/Illuminate/Auth/TokenGuard.php#L45 Laravel将尝试使用您授权api_token,如果它可以在请求字段中找到.


您还可以使用HTTP标头来使用令牌进行授权:
标头示例:

Authorization: Bearer 123hello4secret
Run Code Online (Sandbox Code Playgroud)