我在大学的一个部门工作,使用CAS提供单点登录身份验证,并且正在编写需要使用此CAS服务的CakePHP应用程序。我需要编写代码:
作为CakePHP的一个相对较新的人,我经常在哪里坚持“不属于”的代码。我能想到的最好的是这个代码应该放在App Controller的beforeFilter方法中,但我想知道,这是最适合它的地方吗?此外,堆栈中是否太低以利用管理路由?
最后,我知道CakePHP提供了Auth和ACL组件,但是当我使用它们时,它们似乎不适合与外部认证服务连接。我错了,这些都不适合我需要做的事情吗?
谢谢!
答案 0 :(得分:1)
如果您查看Cake的core components,您可以看到您的CAS要求符合组件通常用于的类型(即.auth / session)。
我建议您创建一个CasAuthComponent
。在extending AuthComponent
中有一些信息,在我之前的答案中,如果您希望在现有核心AuthComponent
之上构建,这可能会很有用。
组件(基本上可重用的控制器代码)可以与模型交互,使用其他组件(例如Session)和控制用户流(例如重定向)
请注意,核心AuthComponent
实际上从模型中检索信息(默认情况下为用户模型),因此您可以执行类似的操作。
您创建的CasAuthComponent
可以$use
一个外部用户模型(可能是CasUser
),它负责对数据进行CRUD操作(主要检索用户)。
您可以更进一步,将CAS交互抽象为此模型使用的数据源,但如果您不打算重复使用其他模型中的代码,则不一定非必要。
最终结果可以打包成插件:
CasAuthComponent
(app/plugins/cas/controllers/components/cas_auth.php
)CasUser
(app/plugins/cas/models/cas_user.php
)CasSource
(app/plugins/cas/models/datasources/cas_source.php
)[可选] 通过在app_controller中添加以下内容在您的应用程序中使用:
public $components = array('Cas.CasAuthComponent');
如果您希望能够从Cake管理用户,您还可以在插件中包含控制器和视图,以便用户与CasUser
模型进行交互(即$this->CasUser->save()
)。