html代码是:
<a href="room/info/{{$value->id}}">Click to show details</a>
此代码正在生成此类链接:
localhost:8000/room/info/2
路由器是:
Router::get('room/info/{id}', 'roomcontroller@details');
数字'2'是房间的id。
但我觉得它没有安全感。因为用户可以从浏览器地址栏更改ID。现在我想知道Laravel框架中有任何安全的方法来使用查询字符串吗?或者还有其他方法可以使用Laravel安全地进行操作吗?
答案 0 :(得分:2)
您可以使用Middleware阻止用户进入不允许的房间。在到达控制器之前,每个请求都会传递给此路由的所有已注册中间件。因此,您可以轻松检查用户是否有权查看此房间。
在Laravel 5中,您可以非常轻松地创建中间件:
php artisan make:middleware RoomMiddleware
将在app/Http/Middleware
中生成新文件。你可以在那里写下你的逻辑:
<?php namespace App\Http\Middleware;
use Closure;
class RoomMiddleware
{
/**
* Run the request filter.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// You can make your checks here, like if
// the user is logged in and he can view
// this room
$roomId = $request->input('id');
if (\Auth::guest() || !\Auth::user()->isAuthorized($roomId)) {
return redirect('home');
}
return $next($request);
}
}
请注意,这只是一个例子。函数isAuthorized
不存在,你必须在那里实现你的逻辑。
然后,您需要在app/Http/Kernel.php
protected $routeMiddleware = [
'room' => 'App\Http\Middleware\RoomMiddleware',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];
然后,您可以将此中间件设置为您的路线,如下所示:
Route::get('room/info/{id}', ['middleware' => 'room', 'uses' => 'roomcontroller@details']);
在Laravel 4.2中你有类似的东西,但它被称为Route Filters。