如何使用Zend Framework检查用户是否已登录?

6

我正在学习Zend框架,但对使用和概念有一些疑问。

我想检查用户是否已登录,以允许访问所有页面。如果是,则显示页面;如果不是,则显示登录页面。

我的主要疑问是我需要使用什么来实现这个功能(Zend_Auth,Zend_Acl等),以及在哪里检查用户是否已登录(在每个控制器中还是框架自动为每个请求检查)。


ACL通常用于用户控制级别。您需要Zend_Auth。 - Brendan
对于那个给出负面评价的用户,为什么是-1? - Renato Dinhani
1
因为“你的问题没有显示出任何研究努力”(将鼠标悬停在向下箭头上即可看到)。有很多教程可以找到,ZF还有一份优秀的手册,可以给你提供所需的信息。无论如何,我的回答应该会让你朝着正确的方向前进。祝你好运。 - vascowhite
@vascowhite 那么,需要说明我正在研究这个问题吗?虽然我没有说过,但是我确实做了很多研究。如果你看一下,我的主要疑问在于使用Zend_Auth还是Zend_Acl,因为我看到了很多使用每种方法的例子,但我不确定该使用哪种。第二个疑问是因为我不知道前端控制器是否会进行检查,或者我需要在每个控制器中进行检查。我的问题在于澄清这些问题。 - Renato Dinhani
最好提到你目前尝试/研究过的内容,因为这有助于人们决定如何帮助你,而不会重复你已经涉及过的领域。 - vascowhite
2个回答

5
你想要使用的工具是Zend_Auth,一旦掌握,使用起来非常简单。
检查用户是否登录可以像这样简单:-
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()) $loggedIn = true;

查看Rob Allen关于如何开始使用Zend Auth的优秀教程

我使用的方法是设置一个用户类,负责授权和访问控制,并将其作为Action Helper注入到我的应用程序中,这样在我的任何控制器中,只需执行以下操作:

$this->user->checkSomething();

授权部分需要影响您不希望公开的所有网站部分,每个受影响的控制器都需要检查用户是否已登录。对于访问控制,可以根据角色/资源进行逐个控制,具体取决于您需要多么细致。请参见手册中的ACLAUTH


以什么方式?只有在需要时才会加载操作助手,我从未注意到它的性能问题。你能提供一个来源链接吗?我很想阅读一下。 - vascowhite
@songo 我不会为他们的使用辩护,我对此并没有强烈的感觉。我只是说我使用它们。如果其他人出于任何原因不想使用它们,那对我绝对没有影响。我只是有兴趣阅读任何可能给我更多信息的内容。 - vascowhite
我没看过这些,挺有趣的,谢谢提供链接。不过,在性能真正成为问题之前,我还是会继续使用操作助手 :) - vascowhite
动作堆栈和动作助手不是同一回事。动作堆栈会影响性能,而动作助手只是一个类,像视图助手一样被加载和运行。 - Tim Fountain
@TimFountain 谢谢澄清。我还没有时间阅读它们。 - vascowhite
显示剩余3条评论

2

想要检查用户是否已登录ZendFramework吗?试试这个:

将以下代码放置在您的控制器中的任何位置以进行“调试”,并将其放置在代码的顶部或开头:

if (Zend_Auth::getInstance()->hasIdentity()) echo "oh yeah I'm logged in lol"; die;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接