【发布时间】:2013-12-18 21:15:35
【问题描述】:
我想知道如何在laravel 4 中进行以下操作。我有一个过滤器来检查用户是否在所有具有 user/*.我的过滤器按预期工作,但假设用户登录他们的url 看起来像这样user/id。如何防止经过身份验证的用户查看其他用户?
【问题讨论】:
-
您应该已经发布了相关代码以获得更具体的答案。
标签: php laravel-4 restful-authentication
我想知道如何在laravel 4 中进行以下操作。我有一个过滤器来检查用户是否在所有具有 user/*.我的过滤器按预期工作,但假设用户登录他们的url 看起来像这样user/id。如何防止经过身份验证的用户查看其他用户?
【问题讨论】:
标签: php laravel-4 restful-authentication
另一种方法是更改您的网址。 为什么有像 user/{id} 这样的 url? 只需将其更改为例如
user/profile
在控制器内部执行如下操作:
$user = Auth::user();
这样用户就不能伪造是 id.. 我只在需要编辑某些用户的管理区域中使用带有 id 的 url:
/admin/{id}/edit
【讨论】:
在您的Auth 过滤器中,您可以访问路由参数('user/{id}'),并可以使用id 中的id 来检查登录用户的id,就像在url 中一样
Route::filter('auth', function($route)
{
// get the id from rouqe
$id = $route->getParameter('id');
if( Auth::check() && Auth::user()->id != $id) {
// not authenticated user, so access is denied
return Redirect::to('/');
}
});
【讨论】:
如果这是一个用户只能查看他们自己的个人资料的一揽子政策,那么您是否可以检查来自 user/{id} 路由的 id 是否与登录会话中的当前用户 id 匹配,例如。在配置文件控制器中类似于:
public function getProfile($profile_id) {
if (Auth::user()->id != $profile_id) {
//this is not your profile - don't be nosey!
} else {
//have you got nothing better to do than look at yourself all day!
}
}
格伦
【讨论】: