我对python和web2py都是新手。我的项目在前端使用angularjs,后端使用web2py作为Rest服务。在
我注意到web2py已经开发了用于身份验证和授权的类Auth
。但是,如果我使用restapi,我真的不知道如何在restapi上重用这个类。在
例如,我尝试通过ajax调用注册新用户:
$http.post('/myapp/authentication/register', user)
以下代码根本不起作用:
^{pr2}$我必须以手动方式天真地插入auth_user
表:
def register():
username = request.vars.username
password = request.vars.password
email = request.vars.email
row = db.auth_user(username=username)
if not row:
db.auth_user.insert(username=username, password=password, email=email)
else:
raise HTTP(409, 'username exists')
这个方法可以将新用户插入auth_user
表中。但是,当我尝试使用login_bare
方法时:
login_bare(self, username, password)
用上述方法注册的用户总是失败的。我有什么办法可以解决这个问题吗?在
看起来你在auth表中创建了一个用户记录,很好。但是你在哪里登录用户?您使用的认证模型基本上是用户在UI中首先注册,然后使用用户ID和密码登录。在
这种授权方式对于REST客户机来说并不理想,原因有几个,其中一个原因是典型的REST客户机的行为不像浏览器,不维护cookies,因此无法维护会话。你可以要求你的REST客户端维护cookies,但这很奇怪。在
我建议使用为REST构建的授权框架。我们在3Scale上取得了很好的效果。这为您提供了一种定义用户及其权限的方法;提供了一个用户管理其帐户的门户(例如,可以重新颁发密钥);甚至可以访问API doco(如果您选择将其放在那里)。在
如果您不喜欢这种方法,可以考虑像Amazon那样为每个用户颁发公钥和私钥,并为客户机必须如何签署每个请求建立一个协议。您可能可以从开源的AWS工具中获取解决方案。在
简言之,您可能可以找到一种方法,使user auth framework对REST起作用,但是如果不这样做,您将获得更好的结果
上面插入的是明文密码。但是,默认情况下,
^{pr2}$db.auth_user.password
字段有一个CRYPT()
验证器,用于散列密码,而散列值是登录时检查的内容。通常,字段验证器(包括密码字段的CRYPT
验证器)在表单提交和处理时运行(在这种情况下不会发生这种情况,因为您没有使用web2py表单提交注册)。但是,您可以按如下方式运行验证器:相关问题 更多 >
编程相关推荐