如果我要遵循开发人员在构建公共网站之前应该知道什么?关于身份验证,我有什么选择?
我从来没有用过 PEAR,我也不打算开始。我已经阅读了有关phpGALC的信息,但还没有尝试过。
身份验证后,权限/访问级别启动。我不喜欢使用单个 tinyint 值来决定用户可以做什么和不能做什么,除了它不是很灵活。我最近编写了一个分区系统,在其中我指定了每种用户类型可以访问的访问权限,但是有更好的方法吗?
如果你想要一种语言,那么 PHP5。
ACL 和 Auth 是我目前正在做的事情。我目前正在使用CakePHP,它为 ACL 提供了一个广泛的(尽管不简单)模块,以及一种简单的身份验证方法。我也对答案感兴趣。
我收集到的:
身份验证相当简单。通过 ACL 或其他方式进行的授权可能很复杂。
身份验证通常只是将用户名和密码与存储的凭据进行匹配。只需使用 SSL 和使用盐的哈希密码。
授权可能是野兽,解决方案取决于您的要求。您可以尝试 PhpGALC 和 Zend Framework ACL 组件。这两个选项都有角色、资源和可选权限,尽管它们的名称都不同。Zend ACL 更简单、更通用(规则可以简单地在您的代码中定义,并且不需要数据库)。如果您的角色、资源和权限不是静态的,那么使用 Zend ACL,您将不得不编写代码来从您的数据存储中填充 ACL。phpGALC 的一大优点是它有一个 Web GUI。我发现 GUI 很笨拙,但除非您真正了解 ACL,否则考虑到角色和资源继承等 ACL 的复杂性,直接在数据库中进行更改可能很危险。
我不喜欢使用单个 tinyint 值来决定用户可以做什么和不可以做什么,除了它不是很灵活。
这取决于...您是指将值用作整数还是位域?
如果您只是将它用作一个数字(5 级用户具有 1-4 级用户的所有能力,再加上一点),那么,是的,这不是很灵活。
如果您将它用作位域,它会为您提供 8 个(组)功能,可以为任何用户以任意组合打开或关闭这些功能。我称之为灵活。而且,如果 8 个功能对您来说还不够,将 tinyint(8 位)更改为 smallint(16 位/功能)、int(32 位)或 bigint(64 位)也很简单,应该超过足以满足我们大多数人可能编写的任何应用程序。
大多数框架都内置了身份验证模块。因此,您可能需要查看 Zend、CakePHP、Code Ignighter 等。
还有一件容易混淆的事情是转义和编码数据之间的区别。当数据被编码然后转义时,事情会变得更加灵活。
用户身份验证确保如果用户尝试访问应用程序拒绝免费访问的页面,它会将用户重定向到日志记录页面,并在成功登录后返回到请求的页面。在以下 wrt 陷阱、方法和方式中解释了 cake 的默认 Auth 的一种这样的实现。
http://enbake.com/cakephp-user-authentication-auth-component
框架不会让你受到限制。而是通过现有模块和更有条理的代码为您提供开发速度。如果有兴趣,可以向您展示比较黑白框架。