2016-07-04 93 views
1

我尝试为我的web2py应用程序构建一个API。Restful API with authentication

# -*- coding: utf-8 -*- 
auth.settings.allow_basic_login = True 

@auth.requires_login() 
@request.restful() 
def api(): 
    response.view = 'generic.json' 

    def GET(tablename, id): 
     if not tablename == 'division': 
      raise HTTP(400) 


     result = db(db.division.title == id).select() 

     return dict(result = result) 

return locals() 

但每次我试着通过卷曲连接我得到这样的回答:

You are being redirected <a href=\"/my_manager/login?_next=/my_manager/api/get_all_divisions/1.json\">here</a> 

当我注释掉该行

@auth.requires_login() 

everythink工作正常。

我已经搜索了提示,但到目前为止还没有发现任何有关此主题的有用信息。

任何帮助真的很感激。

+0

你的卷曲电话是什么样的?你确定你传递了有效的登录凭据吗? – Anthony

+0

@sarah我面临类似的问题,仍然在等待解决方案。我发布了一个关于这个问题的问题,你可以从评论或我的代码中获得一些帮助。 http://stackoverflow.com/questions/33938076/how-to-make-api-call-that-requires-login-in-web2py –

+0

@Anthony我尝试从web2py书的例子,我敢肯定,登录数据是正确的。我的登录电子邮箱地址和密码 –

回答

0

我知道它的一个很老的问题,但还是这个答案会帮助谁可能会遇到同样的问题,其他人:

那么在您使用@auth.requires_login()这需要用户的情况下,在登录

所以您需要在调用此API时发送基本的身份验证凭据。

一个简单的卷曲呼叫可以是:

curl --user [email protected]:abc123 http://localhost:8000/app_name/default/api/table_name.json 

这里:

  • [email protected]是用户名
  • ABC123是密码
  • APP_NAME是web2py的的应用程序名称
  • table_name是db中的表名