Web2py Basic Auth - 经过身份验证的用户信息

Web2py Basic Auth - Authenticated User Info

我在 Web2p 中使用基本身份验证。通常我会在函数中使用 auth.user 来获取与经过身份验证的用户相关的信息,当我通过基本身份验证进行身份验证时,这似乎不起作用。 有什么我想念的吗?

这是我的授权设置

auth.settings.remember_me_form=False
auth.settings.password_min_length = 8
auth.settings.registration_requires_verification = True
auth.settings.registration_requires_approval = False
auth.settings.reset_password_requires_verification = True

我用来测试的函数

def call():
    session.forget()
    return service()

auth.settings.allow_basic_login = True
@auth.requires_login()
@service.run
def test():
    a = auth.user
    b= 'hello'
    return(a,b)

这样做的目的是通过 phonegap 应用程序的 HTTP 请求获取经过身份验证的用户的个人资料详细信息。我正在使用

r = requests.get(url, auth=HTTPBasicAuth('email', 'passwd'))

它验证了 returns none auth.user

谢谢

根据 documentation,您不应在 RPC 函数上使用 Auth 装饰器。相反,您应该修饰 call() 函数:

auth.settings.allow_basic_login = True
@auth.requires_login()
def call():
    session.forget()
    return service()

@service.run
def test():
    a = auth.user
    b = 'hello'
    return (a, b)

无论如何,您可能对使用上述方法时的响应格式不满意,因为 "run" 服务只是将 str() 应用到 return 值 -- 所以,你会得到类似:

"(<Row {'first_name': 'John', 'last_name': 'Doe', 'email': 'john@doe.com', 'id': '1L'}>, 'hello')"

一个更简单的方法就是 return JSON:

auth.settings.allow_basic_login = True
@auth.requires_login()
def test():
    from gluon.serializers import json
    return json((auth.user, 'hello'))

然后请求:

r = requests.get('http://yourdomain.com/yourapp/default/test',
                 auth=HTTPBasicAuth('email', 'passwd'))

在这种情况下,无需使用 service() 或创建 call() 函数。