Heim  >  Artikel  >  Backend-Entwicklung  >  laravel 如何实现对文件授权访问?

laravel 如何实现对文件授权访问?

WBOY
WBOYOriginal
2016-07-06 13:51:141256Durchsuche

在laravel的public目录下有个res的目录,想在用户访问里面的图片的时候鉴定是否有权限,
但是用户输入地址会直接访问到这个文件,不会经过auth中间件的鉴定,
例如:在public下的res目录里面放一个图片,如图
laravel 如何实现对文件授权访问?

路由:

<code>Route::get('/res/{res}', ['middleware' => 'auth', 'uses' => 'TestController@res']);</code>

访问可以直接看到图片,如何实现只有登录过的用户才可以看到图片呢?
laravel 如何实现对文件授权访问?

我看了一下我的百度盘里面的图片的链接,
是类似于这样的

<code>http://thumbnail0.baidupcs.com/thumbnail/e9be0226a22b8a1ad721032ac0338bb3?fid=4079835327-250528-565979844600151&time=1467727200&rt=yt&sign=FDTAER-DCb740ccc5511e5e8fedcff06b081203-4mQdS41CM3TuSq6hpE8LIAn%2FiL0%3D&expires=2h&chkv=0&chkbd=0&chkpc=&dp-logid=4335431112578733428&dp-callid=0&size=c256_u256&quality=100</code>

好像是给每个图片生产一个hash值,然后根据路由和路由里面的参数进行验证,通过后根据hash返回文件。
具体的实现原理,有哪位可以请教一下呢?

回复内容:

在laravel的public目录下有个res的目录,想在用户访问里面的图片的时候鉴定是否有权限,
但是用户输入地址会直接访问到这个文件,不会经过auth中间件的鉴定,
例如:在public下的res目录里面放一个图片,如图
laravel 如何实现对文件授权访问?

路由:

<code>Route::get('/res/{res}', ['middleware' => 'auth', 'uses' => 'TestController@res']);</code>

访问可以直接看到图片,如何实现只有登录过的用户才可以看到图片呢?
laravel 如何实现对文件授权访问?

我看了一下我的百度盘里面的图片的链接,
是类似于这样的

<code>http://thumbnail0.baidupcs.com/thumbnail/e9be0226a22b8a1ad721032ac0338bb3?fid=4079835327-250528-565979844600151&time=1467727200&rt=yt&sign=FDTAER-DCb740ccc5511e5e8fedcff06b081203-4mQdS41CM3TuSq6hpE8LIAn%2FiL0%3D&expires=2h&chkv=0&chkbd=0&chkpc=&dp-logid=4335431112578733428&dp-callid=0&size=c256_u256&quality=100</code>

好像是给每个图片生产一个hash值,然后根据路由和路由里面的参数进行验证,通过后根据hash返回文件。
具体的实现原理,有哪位可以请教一下呢?

laravel本身只处理/public/index.php这一个入口, 你说的图片文件不在index.php里面,Laravel不管的;

除非你把图片的访问放在一个控制器里面,比如 /Img/locaiton?user=xxx&name=iiii, 这样访问ImgController.php,你自己读取图片显示出来就行了, 你自己加auth就OK(注意不要把图片放在/public下面了,放在public同级目录下)

public/里面除了index.php 其他的文件都是纯静态文件,根本就不在Laravel路由里面

至于百度网盘的hash参数什么的 都是读取文件的地址和过期时间,你自己按自己的方式实现就可以,想要什么自己加

用WebServer做rewrite,经过一个控制器php,在这个控制器中Auth:check。

需要控制权限访问的文件,不应当放在 public 目录下,而是 storage 目录下,这样外部根本不可能直接访问得到。

你可以通过实现一个控制器,在这里面鉴定访问者权限,若是符合,则可以以你希望的形式通过 HTTP 的传输流输出图片二进制数据。

Laravel 的(准确的说是 Symfony)已经提供了这种类型的 Response,可以翻阅文档查找相应的 API。

所有你已知的那种图片权限验证和防盗链处理方式大多是如此。

以上。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn