我在db.py中添加了代码,以便在auth.define_tables(username=False, signature=True)
之前添加额外的字段:
auth.settings.extra_fields['auth_user'] = (
[Field('user_type',label="reg_type",default="Stu", requires=IS_IN_SET(['Stu, 'Com'],multiple=False))])
我希望在我的操作中进行一些身份验证,如下所示:
@auth.requires(auth.user.user_type=="Stu",requires_login=True)
define someaction:
code
但是,当我运行我的应用程序时,我收到了错误提示。
'NoneType' object has no attribute 'user_type'
我已阅读手册
@ auth.requires还带有一个可选参数requires_login,默认为True。如果设置为False,则不需要先登录 将条件评估为真/假。条件可以是布尔值 值或评估为布尔值的函数。
请注意,访问除第一个之外的所有功能 根据访问者可能拥有或不拥有的权限进行限制。
如果访问者未登录,则权限不能 检查;访问者被重定向到登录页面,然后返回到 需要权限的页面。
所以我无法理解导致错误的原因。谢谢。
答案 0 :(得分:1)
当用户未登录时,auth.user
为None
。所以,你必须考虑到你的情况:
@auth.requires(auth.user and auth.user.user_type == "Stu")
注意,requires_login=True
是默认设置,因此您无需指定(在这种情况下,无论如何都不需要,因为auth.user
不是None
意味着用户已登录。)