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

时间:2015-03-30 06:56:09

标签: web2py

我在Web2p中使用Basic Auth。通常我会在函数中使用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'))

it Authenticates但不为auth.user

返回任何内容

由于

1 个答案:

答案 0 :(得分:1)

根据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)

无论如何,在使用上述方法时,您可能对响应的格式不满意,因为“运行”服务只是将str()应用于返回值 - 因此,您得到类似的结果:

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

更简单的方法就是返回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()功能。