cakephp 避免登录用户访问其他用户的帐户

Posted

技术标签:

【中文标题】cakephp 避免登录用户访问其他用户的帐户【英文标题】:cakephp avoid logged in users to access other user's account 【发布时间】:2011-03-31 21:10:15 【问题描述】:

我正在使用 Cakephp 1.3.7 开发一个网站。一切都很好,我喜欢它,但我只是遇到了一个我不知道如何解决的问题(可能是因为我缺乏知识)。

这是我的问题:

在网站中,有一个典型的“管理我的帐户”区域,用户只有在登录后才能访问该区域。在这个区域中,有一个链接可以调用同一个“用户”控制器中的操作,称为“编辑项目'。因此,当用户转到 edit_items 时,操作会接收用户的 id 作为参数(类似于 domain.com/users/edit_items/45,其中 45 是用户的 id ),并以表格形式显示信息。问题来了,如果我直接去浏览器的地址栏,把那个 45 改成其他任何用户的 ID,那么即使那个用户没有登录,那个其他用户的信息也会显示出来。这显然是一个很大的安全问题。

我一直在尝试避免将用户的 id 作为参数传递,并使用 $this->Auth->User('id') 从 Auth 组件(我正在使用)获取它强>。无论出于何种原因,我都可以将登录用户的信息读入表单中,但是当我尝试保存表单上的更改时,我收到一个错误,好像 save 操作失败了,我有不知道为什么。

还有其他方法可以避免我的问题吗?或者找出为什么 save 返回错误?

谢谢!

编辑

所以问题来自验证,这里是交易:当用户填写表单以创建新项目时,有某些字段,其中一些应用了验证规则。但是,当用户返回编辑项目时,并非所有字段都是可编辑的,只有一些字段是可编辑的。是否有可能,由于在创建项目时需要验证的某些字段在编辑时不可用,从而导致错误?怎么能避免呢?我可以仅更改 edit 操作的验证规则吗?

发生情况的示例:创建项目时,其中一个字段是 item_name,它应用了一些验证。编辑项目时,其名称不能更改,因此不会显示在编辑表单中。我相信这可能是导致错误的原因,可能是因为缺少 item_name

【问题讨论】:

【参考方案1】:

你的方向是正确的 - 当用户需要编辑自己的详细信息时,在 url 上传递 user_id 是个坏主意。

您可以使用以下方法:在实际保存之前保存表单时,您可以将 user_id 传递给发布的数据。像这样的:

if (!empty($this->data)) 
   $this->data['User']['id'] = $this->Auth->user('id');
   ... //Some extra stuff
   if ($this->User->save($this->data)) 
      ... //success
    else 
      ... //error
   

这样,登录的用户将始终覆盖它自己的记录。检查您的模型中是否有一些验证规则会导致此错误。

【讨论】:

感谢您的回复。问题在于验证,你是对的,我需要弄清楚为什么 解决了! :) 只需在您不想验证的所有字段的“保存”功能之前添加unset($this->User->validate['field']);

以上是关于cakephp 避免登录用户访问其他用户的帐户的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 护照 - 允许用户作为/登录为其他用户

如何设置最大登录用户 cakephp

使用firebase创建新用户时如何避免自动登录[重复]

在 CakePHP 中使用不同的用户角色登录?

cakephp 3.0 注册与现有用户问题关联的帐户

Cakephp auth 和 acl 未登录用户组