我在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
返回任何内容由于
答案 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()
功能。