【问题标题】:Laravel 4 Prevent Authenticated users from viewing other user profilesLaravel 4 防止经过身份验证的用户查看其他用户配置文件
【发布时间】:2013-12-18 21:15:35
【问题描述】:

我想知道如何在laravel 4 中进行以下操作。我有一个过滤器来检查用户是否在所有具有 user/*.我的过滤器按预期工作,但假设用户登录他们的url 看起来像这样user/id。如何防止经过身份验证的用户查看其他用户?

【问题讨论】:

  • 您应该已经发布了相关代码以获得更具体的答案。

标签: php laravel-4 restful-authentication


【解决方案1】:

另一种方法是更改​​您的网址。 为什么有像 user/{id} 这样的 url? 只需将其更改为例如

 user/profile

在控制器内部执行如下操作:

$user = Auth::user();

这样用户就不能伪造是 id.. 我只在需要编辑某些用户的管理区域中使用带有 id 的 url:

/admin/{id}/edit

【讨论】:

  • 但是在我的应用程序中,我的用户可以创建和编辑他们的个人资料,因此他们的路线看起来像这个用户/个人资料/id/edit。出于好奇,我可以让网址看起来像这个用户/个人资料/用户名吗? @amirbar
  • 为什么在 url 中需要他们的 id?您也不需要他们的用户名,在您的控制器中,您可以像这样获取他们的 id:$id = Auth::User()->id 并将您的 url 更改为:/user/profile/edit 并将过滤器放入到 auth 的路由中如果用户未登录,他将重定向到登录 @elodev
【解决方案2】:

在您的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('/');
    }
});

【讨论】:

    【解决方案3】:

    如果这是一个用户只能查看他们自己的个人资料的一揽子政策,那么您是否可以检查来自 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!
        }
    }
    

    格伦

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      相关资源
      最近更新 更多