需求描述:实现访问文件需验证用户。
实现方案:
方案一:根据laravel业务中间件验证用户思路来设计,看了一些网上的设计方案,都不是我想要的。所以我思考了一下以接口形式来访问指定文件再请求接口时来验证用户
1、测试接口访问返回访问文件
public function test(Request $request)
{
$fileName = $request->id;
return response()->file(realpath(base_path('public')).'/'.$fileName);
}
2、增加路由
Route::any('/test/{id}', 'Login\LoginController@test');
3、测试请求public下指定文件
4、修改上传文件返回文件路径接口,把返回的图片请求根据路由来修改。
方案二:设置nginx对路径进行重写访问
1、配置nginx 增加重新规则
if ( $uri ~* "^/uploads/files/(.+)" ) {
set $rightUrl $1;
rewrite ^/(.*)$ http://xxxx:8284/admin/files/$rightUrl last;
#proxy_pass http://39.96.41.159:8284/admin/images
}
注意:admin/images 走的是框架接口,接口直接返回文件或图片,接口参考一.1。其中路径中(.+)为动态参数,动态参数为$1,$1不能被直接使用所以要变量赋值,rewrite 中的last意思是完成rewrite后马上发起请求,也可以break不在执行nginx下面语句。nginx重新路由可以再不修改之前上传路径的情况下完美解决文件需要验证的问题,推荐。