如何将用户登录路由到其帐户?

时间:2012-07-08 21:39:35

标签: cakephp authentication user-accounts

我需要指出正确的方向。我正在编写一个简单的应用程序,用户可以登录并查看其任务列表。我希望应用程序安全。我只能验证用户访问整个站点的程度。显然这不是我想要的。我希望他们只访问自己的帐户。有没有一个好的网站可以阅读这个?我正在学习v2.x。感谢

3 个答案:

答案 0 :(得分:1)

我想不到除了这本书以外的任何网站。这就是我实施我的方式。我将记录的用户设置在应用程序控制器的beforeRender回调中。这样它就可以在所有控制器中使用。

然后我在用户控制器中有一个名为dashboard的函数

function dashboard($userId = NULL) {}

如果userId与记录用户中的用户匹配,或者在我的情况下,用户是管理员,则继续,否则重定向用户并发出不允许的消息。

如果您仅使用Auth组件,则所有这些都是如此。如果您也想使用ACL组件,则必须检查是否也允许用户访问该页面。

源头 http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html

答案 1 :(得分:0)

你的问题非常笼统,但这里有一些可能有用的信息。

通过注册表列出和查看数据,您可以访问登录的用户ID。因此,在整个应用程序中,在所有方法中,只需获取与登录用户ID相关的数据。

关于编辑/删除数据,您可能需要根据他们尝试编辑或删除的记录的ID来检查登录用户的ID。

这是我挖出的一些旧的CakePHP 1.3(即NOT 2.x)代码。此方法在我的AppController中,并在用户尝试编辑/删除记录时被调用,以确保该记录属于其用户帐户。

function checkUserID($pUserId) {
    // This is called for methods when a user can only access it for their own user account - eg, a user can call 'edit', but only on their own records.    
    if ($pUserId != $this->Auth->user('id')){
        $this->Session->setFlash(__('You are not authorized to access that location', true));
        $this->redirect($this->referer());
    }
}

为了举例说明如何使用此方法,当用户尝试删除该应用中的评论时,我会执行以下操作:

$commentToDelete = $this->Comment->read(null, $id); // get the comment they are trying to delete
$this->checkUserID($commentToDelete['Comment']['user_id']); // check that it is their own comment
// If they pass the above test, then continue and delete the comment.
// If not, they will have already been redirected by the checkUserID method

如果您有任何问题,请与我们联系。

编辑: 回应尼克的评论:

之前我使用过isAuthorized(),但是在上面给出的例子中看不出它是如何工作的。如果用户删除评论,则必须执行以下操作:

$this->checkUserID($commentToDelete['Comment']['user_id']); // check that it is their own comment

但如果他们要删除一个小部件,那就必须是:

$this->checkUserID($widgetToDelete['Widget']['user_id']); // check that it is their own widget

如果他们正在编辑属于“图库”记录的“照片”记录,那么情况可能会更加复杂,这些记录会保存他们的user_id,因此“照片”记录本身没有' user_id'field。

我无法看到你如何能够在isAuthorized()中优雅地处理这些可能的情况。我错过了什么吗?我想问题是,在isAuthorized()中,您可以获取登录用户的ID,但是如何知道要与哪个ID进行比较,以确保他们正在编辑或删除的记录属于他们? / p>

答案 2 :(得分:0)

我并不是100%肯定你所问的是什么,但据我所知,你需要你的用户才能访问某种与他们的账户相关的控制面板或界面。以下是我要做的事情:

  • 在控制器中设置一个不带参数的功能
  • 检查以确保用户已登录
  • 如果他们在使用时设置了视图所需的数据 用户的id字段作为条件。使用此方法,用户不能 指定他们试图访问哪些数据,这取决于逻辑 您的控制器和模型
  • 如果不是,则将其重定向到其他地方

如果您编辑问题并提供有关您要完成的更多信息,我可以举例或进一步解释。