Php 用户注册设计

Php 用户注册设计,php,authentication,codeigniter,Php,Authentication,Codeigniter,我正在为CodeIgniter构建一个自定义用户注册/登录/bla-bla-bla库 我正在寻找一些关于图书馆走向的提示 即 显然,除了常规库文件之外,您还需要一些调用库的其他函数 验证逻辑应该去哪里 脚本 我们请求 现在,在某个阶段,用户控制器中的register函数需要调用用户库中的register函数 我是否将验证(已存在、需要密码、电子邮件有效、密码符合最低标准等)构建到控制器或库中 我最初的直觉是将验证构建到控制器中,让库函数只做一件事。也就是说,用户库中的register函数只需sh

我正在为CodeIgniter构建一个自定义用户注册/登录/bla-bla-bla库

我正在寻找一些关于图书馆走向的提示

即 显然,除了常规库文件之外,您还需要一些调用库的其他函数

验证逻辑应该去哪里

脚本 我们请求

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

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

我最初的直觉是将验证构建到控制器中,让库函数只做一件事。也就是说,用户库中的
register
函数只需
sha1()
输入密码并将用户名/密码插入数据库


我在这里走的是正确的道路,还是图书馆应该做所有的工作,而管理员只是简单地接收和传递请求?

我认为您这样做是为了您自己的利益,即纯粹为了自我教育的目的。如果不是,你可能是在重新发明轮子——我很难想象codeigniter还没有一个成熟的注册解决方案。但是,如果您真的想建立一个处理用户注册的库,请考虑以下内容:

  • 不要将注册表参数作为URL的一部分传递。这显然是一个坏例子,也是一个巨大的安全漏洞。对窗体使用“post”方法将变量传递给控制器
  • 使用客户端验证,最好使用基于jquery、mootools、yui等构建的现成javascript解决方案——不管您的js库偏好如何。使用客户端验证可以为您的未来用户节省时间和挫折感。检查用户名可用性、密码强度、电子邮件地址有效性(通过regexp)、确认密码字段的密码匹配。客户端验证属于库的“视图”部分
  • 使用哈希站点机密作为表单中的隐藏输入
  • 对您的表单使用可访问的验证码
  • 根据会话,使表单具有粘性。如果您的用户填写表单,在完成注册之前导航离开,然后返回表单,则应向他/她显示先前填写的值
  • 启用第三方注册。用户应该能够通过他们的第三方帐户注册到您的站点-在您的注册表上至少启用openID和facebook connect
  • 使用服务器端验证,检查所有字段内容的有效性,转义所有用户输入。服务器端验证属于库的控制器或模型部分,我更愿意将其放入模型中
  • 创建可配置的工作流。如果您试图创建一个灵活的库,则必须满足注册工作流的各种需求。您的某些库用户在启用其站点上的用户之前,希望进行手动帐户审核。其他人则希望在用户通过电子邮件确认其请求后自动启用
  • 不要硬编码注册表中的字段。根据经验,注册时越少越好,因此在注册用户时,您需要最少的字段集(否则他们只会说,“哈哈,您要的是我母亲的娘家姓?不,谢谢”)。但是,您正在构建一个库,因此请让您的库用户决定注册表单中将包含哪些字段
  • 作为前一点的补充,创建一个灵活的API来定义注册表字段、类型和验证规则
我肯定还有更多的指南,我没有提到移动设备的自定义视图,可能还有更多。但以上这些应该会让你朝着正确的方向开始


至于你问题的这一部分:“我在这里走的是正确的道路吗,还是库应该做所有的工作,而控制器只是简单地接收和传递请求?”-这是我的偏好,但我会使用控制器来执行一般任务,即解析表单值并转义它们,并将这些预处理的值传递给进行实际(语义)验证的模型。

我假设您这样做是为了自己的利益,即纯粹出于自我教育的目的。如果不是,你可能是在重新发明轮子——我很难想象codeigniter还没有一个成熟的注册解决方案。但是,如果您真的想建立一个处理用户注册的库,请考虑以下内容:

  • 不要将注册表参数作为URL的一部分传递。这显然是一个坏例子,也是一个巨大的安全漏洞。对窗体使用“post”方法将变量传递给控制器
  • 使用客户端验证,最好使用基于jquery、mootools、yui等构建的现成javascript解决方案——不管您的js库偏好如何。使用客户端验证可以为您的未来用户节省时间和挫折感。检查用户名可用性、密码强度、电子邮件地址有效性(通过regexp)、确认密码字段的密码匹配。客户端验证属于库的“视图”部分
  • 使用哈希站点机密作为表单中的隐藏输入
  • 对您的表单使用可访问的验证码
  • 根据会话,使表单具有粘性。如果您的用户填写表单,在完成注册之前导航离开,然后返回表单,则应向他/她显示先前填写的值
  • 启用第三方注册。用户应该能够通过他们的第三方帐户注册到您的站点-在您的注册表上至少启用openID和facebook connect
  • 使用服务器sid