2014-02-13 55 views
0

我使用的組合DjangoTornado爲我的網站。龍捲風擁有一個美妙的 認證系統,我想在django視圖中使用它。不幸的是我得到了一個AttributeError如何在django視圖中使用龍捲風認證?

如何在我的Django視圖中使用Tornado身份驗證?

查看

import tornado.web 
from django import shortcuts 

@tornado.web.authenticated 
def testpage(request): 
    return shortcuts.render(request, 'web/templates/index.html') 

錯誤消息

AttributeError: 'WSGIRequest' object has no attribute 'current_user' 

Django是通過連接到WSGIContainer龍捲風:

def main(): 
    static_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'static') 


    assert os.path.isdir(static_path), static_path 

    wsgi_app = tornado.wsgi.WSGIContainer(
    django.core.handlers.wsgi.WSGIHandler()) 

    tornado_app = tornado.web.Application([],static_path=static_path,) 
    server = tornado.httpserver.HTTPServer(tornado_app) 

    server.listen(options.port) 
    tornado.ioloop.IOLoop.instance().start() 

if __name__ == '__main__': 
    main() 
+0

爲什麼你在Django中使用替代龍捲風進行身份驗證。你可以使用django裝飾器,例如'login_required'(來源:https://docs.djangoproject.com/en/1.5/topics/auth/default/#the-login-required-decorator)。 – scriptmonster

+0

由於Tornado爲Facebook,Google,Twitter和OAuth2身份驗證提供了非常簡單的支持。 – Jon

回答

1

tornado.auth模塊經歷了openid/oauth流程,但在該流程結束時,它所做的全部工作都會回調到您可能設置cookie的代碼。您在Tornado中使用get_current_user讀取該cookie,但這是Tornado RequestHandler界面特有的。要從django使用這個cookie,你需要自己讀取cookie(參見tornado.web.decode_signed_value函數,假設你使用set_secure_cookie設置cookie)。你可以在django框架中找到合適的位置來做到這一點,在這種情況下,你可以使用django的login_required修飾器,或者你可以在你的django處理器中做到這一點,在這種情況下,你需要重定向到登錄你自己的形式。