认证方式
几乎每个应用程序都需要能够验证用户身份并设置权限。web2py带有广泛且可自定义的基于角色的访问控制机制.web2py。它还支持协议,例如CAS,OpenID,OAuth 1.0,LDAP,PAM,X509等。
web2py包括一种称为基于角色的访问控制机制(RBAC)的机制,该机制将系统访问限制为授权用户。实现RBAC的web2py类称为Auth。
查看下面给出的模式。
Auth定义了以下表格:
序号 | 表名和说明 |
---|---|
1个 | auth_user 存储用户的姓名,电子邮件地址,密码和状态。 |
2 | auth_group 以多对多结构存储用户的组或角色 |
3 | auth_membership 以多对多结构存储链接用户和组的信息 |
4 | auth_permission 该表链接组和权限。 |
5 | auth_event 在其他表中记录更改并成功访问 |
6 | auth_cas 用于中央身份验证服务 |
自定义身份验证
有两种自定义Auth的方法。
- 从头开始定义自定义db.auth_user表。
- 让web2py定义auth表。
让我们看一下定义auth表的最后一种方法。在db.py模型中,替换以下行:
auth.define_tables()
将其替换为以下代码:
auth.settings.extra_fields['auth_user'] = [ Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}')), Field('address','text') ] auth.define_tables(username = True)
假设每个用户都由电话号码,用户名和地址组成。
auth.settings.extra_fields是额外字段的字典。密钥是要向其添加额外字段的身份验证表的名称。该值是额外字段的列表。在这里,我们添加了两个额外的字段,phone_number和address。
用户名必须以特殊方式处理,因为它涉及身份验证过程,该过程通常基于电子邮件字段。通过将username参数传递到下一行,它会通知web2py我们想要username字段,并且我们希望将其用于登录而不是email字段。它的作用就像一个主键。
auth.define_tables(username = True)
用户名被视为唯一值。在某些情况下,注册可能会在常规注册表格之外进行。同样,新用户被迫登录以完成其注册。
可以使用虚拟字段complete_registration来完成此操作,该字段默认情况下设置为False,并且在他们更新配置文件时设置为True。
auth.settings.extra_fields['auth_user'] = [ Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}'), comment = "i.e. 123-123-1234"), Field('address','text'), Field('complete_registration',default = False,update = True, writable = False, readable = False) ] auth.define_tables(username = True)
这种情况下,新用户在登录时可能希望完成其注册。
在db.py的models文件夹中,我们可以添加以下代码:
if auth.user and not auth.user.complete_registration: if not (request.controller,request.function) == ('default','user'): redirect(URL('default','user/profile'))
这将迫使新用户根据要求编辑其个人资料。
授权书
这是向用户授予某些访问权限或某些权限的过程。
在web2py中,一旦创建或注册了新用户,就会创建一个新组来包含该用户。新用户的角色通常称为“ user_ [id]”,其中id是用户的唯一标识。
创建新组的默认值为:
auth.settings.create_user_groups = "user_%(id)s"
可以通过以下方式禁用用户之间的组创建:
auth.settings.create_user_groups = None
还可以通过appadmin的编程方式来创建,授予对特定成员的访问权限和权限。
下面列出了一些实现:
序号 | 命令与用法 |
---|---|
1个 | auth.add_group(’角色’,’描述’) 返回新创建的组的ID。 |
2 | auth.del_group(group_id) 删除具有指定ID的组 |
3 | auth.del_group(auth.id_group(’user_7’)) 删除具有给定标识的用户组。 |
4 | auth.user_group(用户ID) 返回与给定用户唯一关联的组的id的值。 |
5 | auth.add_membership(group_id,user_id) 返回给定group_id的user_id的值 |
6 | auth.del_membership(group_id,user_id) 撤消对给定member_id(即user_id)的访问。 |
7 | auth.has_membership(group_id,user_id,角色) 检查user_id是否属于给定组。 |
中央认证服务(CAS)
web2py为客户端和服务器内置的web2py提供了一个行业标准,即客户端身份验证服务– CAS。它是第三方身份验证工具。
它是用于分布式身份验证的开放协议。CAS的工作如下-
- 如果用户访问该网站,则协议会检查用户是否已通过身份验证。
- 如果未通过应用程序对用户进行身份验证,则协议将重定向到用户可以在其中注册或登录到应用程序的页面。
- 如果注册完成,则用户会收到一封电子邮件。除非用户验证电子邮件,否则注册将不完整。
- 成功注册后,将使用CAS设备使用的密钥对用户进行身份验证。
- 该密钥用于通过HTTP请求获取用户的凭据,该请求在后台设置。
作者:terry,如若转载,请注明出处:https://www.web176.com/web2py/869.html