用户注册设计

时间:2011-04-14 04:28:17

标签: php authentication codeigniter

我正在为代码点火器构建自定义用户注册/登录/ bla bla bla库。

我正在寻找一些关于图书馆采取什么方向的提示。

即 显然,与通用库文件一样,您将需要一些其他调用库的函数。

验证逻辑应该放在哪里?

方案

我们向http://example.com/user/register/joe@mail.com/joesPassword

发出请求

现在在某个阶段,用户控制器中的register函数需要调用用户库中的register函数

我是否构建了验证(已存在,需要密码,电子邮件有效,密码符合最低标准等)到控制器

我最初的本能是将验证构建到控制器中,并使库函数只做一件事。即,用户库中的register函数只需sha1()密码,并将用户名/密码插入数据库。

我在这里走的是正确的轨道,还是应该完成所有的工作而控制器只是用来接收和传递请求?

1 个答案:

答案 0 :(得分:1)

我认为你这样做是出于自己的利益,即出于纯粹的自学目的。如果没有,你可能正在重新发明轮子 - 我很难想象codeigniter还没有完全成熟的注册解决方案。尽管如此,如果您真的想构建一个处理用户注册的库,请考虑以下事项:

  • 不要将注册表单参数作为URL的一部分传递。 http://example.com/user/register/joe@mail.com/joesPassword显然是一个不好的例子,也是一个巨大的安全漏洞。使用表单的“post”方法将变量传递给控制器​​。
  • 使用客户端验证,最好使用基于jquery,mootools,yui等构建的开箱即用的javascript解决方案 - 无论您的js库首选项是什么。使用客户端验证可以为您的未来用户节省时间和挫败感。检查用户名可用性,密码强度,电子邮件地址有效性(通过regexp),确认密码字段的密码匹配。客户端验证属于库的“视图”部分。
  • 在表单中使用散列网站机密作为隐藏输入。
  • 为表单使用可访问的验证码。
  • 根据会话使表单变得粘稠。如果您的用户填写表单,在完成注册之前导航,并返回到表单,则应向他/​​她显示之前填写的值。
  • 启用第三方注册。用户应该能够通过他们的第三方帐户注册到您的网站 - 在您的注册表单上启用openID和facebook connect
  • 使用服务器端验证,检查所有字段内容的有效性,转义所有用户输入。服务器端验证属于库的控制器或模型部分,我更愿意将其放入模型中。
  • 创建可配置的工作流程。如果您正在尝试创建灵活的库,则必须满足注册工作流程的各种需求。您的某些图书馆用户希望在其网站上启用用户之前进行人工帐户审核。其他人希望在用户通过电子邮件确认其请求后自动启用用户。
  • 不要硬编码哪些字段是注册表单的一部分。根据经验,注册时越少越好,因此在注册用户时你会想要最小的字段集(否则他们只会说,“哈哈,你要求我母亲的处女名字?不,谢谢你“)。但是,您正在构建,因此请让您的图书馆用户决定注册表单中包含哪些字段
  • 作为前一点的补充,创建一个灵活的API,用于定义注册表单字段,类型和验证规则。

我确信还有更多的指导,我没有提到移动设备的自定义视图,可能还有更多。但是上面的内容应该会为你找到正确的方向。

至于你的问题的这一部分:“我在这里走的是正确的轨道,还是图书馆应该完成所有的工作,控制器只是采取行动接收并传递请求?” - 这是IMO的首选问题,但是我将控制器用作一般任务,即解析表单值并转义它们,并将这些预处理值传递给实际(语义)验证发生的模型。