Web2py身份验证用于Restful服务和应用程序用户。

3
在web2py中,我们可以拥有如下所述的restful服务:
auth.settings.allow_basic_login = True

@auth.requires_login()
@request.restful()
def api():
   def GET(s):
       return 'access granted, you said %s' % s
   return locals()

这项服务将被外部系统调用。现在如何定义两个级别的服务使用。一个是可以访问服务的用户(外部系统)。访问后,外部系统将使用Web应用程序向最终用户显示相关数据。进一步说,使用外部系统的最终用户需要登录,我将这些信息存储在与认证相关的表中。 换句话说:最终用户注册并使用外部基于Java的Web应用程序进行登录。该应用程序将作为restful调用我们的web2py。如果我们使用“@auth.requires_login()”装饰器,它是否会验证API调用系统或最终用户。 还提到API调用系统可以调用为

curl --user name:password http://127.0.0.1:8000/myapp/default/api/hello

这意味着外部系统每次调用web2py API时都会传递用户和密码。即使如此,最终用户的登录令牌也将被检查/发送。我希望能有人回答这个问题。
1个回答

2

基本上,您需要为web2py Restfull服务提供两种类型的身份验证。这可以通过使用更一般的auth.requires装饰器来实现。

@auth.requires(custom_auth, requires_login=False)

其中custom_auth是在模型中定义的函数。

def custom_auth():
     """Just a prototype that needs to be extended"""
     web2py_login = auth.user is not None
     other_login  = # do some other checks from a third party system
     return  web2py_login or other_login

请注意,基本身份验证不安全,在生产环境中应尽可能避免使用。请改用基于令牌的身份验证

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接