如何在Web2py中重用Auth注册、认证为restapi

2024-06-17 08:29:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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)

用上述方法注册的用户总是失败的。我有什么办法可以解决这个问题吗?在


Tags: 方法用户authregisterrestapidbemailrequest
2条回答

看起来你在auth表中创建了一个用户记录,很好。但是你在哪里登录用户?您使用的认证模型基本上是用户在UI中首先注册,然后使用用户ID和密码登录。在

这种授权方式对于REST客户机来说并不理想,原因有几个,其中一个原因是典型的REST客户机的行为不像浏览器,不维护cookies,因此无法维护会话。你可以要求你的REST客户端维护cookies,但这很奇怪。在

我建议使用为REST构建的授权框架。我们在3Scale上取得了很好的效果。这为您提供了一种定义用户及其权限的方法;提供了一个用户管理其帐户的门户(例如,可以重新颁发密钥);甚至可以访问API doco(如果您选择将其放在那里)。在

如果您不喜欢这种方法,可以考虑像Amazon那样为每个用户颁发公钥和私钥,并为客户机必须如何签署每个请求建立一个协议。您可能可以从开源的AWS工具中获取解决方案。在

简言之,您可能可以找到一种方法,使user auth framework对REST起作用,但是如果不这样做,您将获得更好的结果

db.auth_user.insert(username=username, password=password, email=email)

上面插入的是明文密码。但是,默认情况下,db.auth_user.password字段有一个CRYPT()验证器,用于散列密码,而散列值是登录时检查的内容。通常,字段验证器(包括密码字段的CRYPT验证器)在表单提交和处理时运行(在这种情况下不会发生这种情况,因为您没有使用web2py表单提交注册)。但是,您可以按如下方式运行验证器:

^{pr2}$

相关问题 更多 >