簡體   English   中英

使用龍卷風創建用於在python中登錄的Web服務

[英]Creating Web service for login in python with tornado

只是為了了解龍卷風的工作原理(我是python和龍卷風的初學者),為登錄頁面提供了服務。 我有一個html頁面,它以{"data":{"Email":"adsf","Password":"asdf","Type":3}}的形式發送參數,但是我不知道如何在龍卷風中獲取參數。

我的login.py

import motor
import tornado.ioloop
import tornado.web
import http

client = motor.MotorClient('localhost', 27017)
db = client.yc


class LoginHandler(tornado.web.RequestHandler):
    def get(self):
        self.check_basic_auth()
        do_stuff()

   def post(self):
     print("test")

   def options(self):
     print("option")
     self._headers['Access-Control-Allow-Origin'] = '*'
     self._headers['Access-Control-Allow-Headers'] = 'Content-Type'

    from pprint import pprint

    pprint(vars(self))


if __name__ == "__main__":
    application = tornado.web.Application([
    (r"/user", LoginHandler)
    ], db=db)
    application.listen(5000)
    tornado.ioloop.IOLoop.current().start()

請指導我如何獲取參數並使用我的mongodb中的值進行驗證

提前致謝

我只是一個初學者。

請仔細閱讀Tornado的身份驗證和安全指南。 我已根據《龍卷風》指南改編了此內容,以在Mongodb中查找用戶記錄:

class BaseHandler(tornado.web.RequestHandler):
    def get_current_user(self):
        return self.get_secure_cookie("user")

class MainHandler(BaseHandler):
    def get(self):
        if not self.current_user:
            self.redirect("/login")
            return
        name = tornado.escape.xhtml_escape(self.current_user)
        self.write("Hello, " + name)

class LoginHandler(BaseHandler):
    def get(self):
        self.write('<html><body><form action="/login" method="post">'
                   'Name: <input type="text" name="name">'
                   'Password: <input type="password" name="password">'
                   '<input type="submit" value="Sign in">'
                   '</form></body></html>')

    @gen.coroutine
    def post(self):
        # TODO: salt and hash the password before storing in the DB, then salt
        # and hash the user's input password before comparing.
        username = self.get_argument("name")
        password = self.get_argument("password")
        doc = yield db.accounts.find_one({"name": username,
                                          "password": password})
        if doc:
            self.set_secure_cookie("user", username)
            self.redirect("/")
        else:
            # No such user or wrong password.
            self.redirect("/login")


if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler),
        (r"/login", LoginHandler)
    ], cookie_secret='SOME RANDOM STRING')
    application.listen(5000)
    tornado.ioloop.IOLoop.current().start()

這段代碼仍然存在一些問題:重新加載登錄頁面后,它應該向用戶顯示一條消息,例如“用戶名或密碼不正確”。 試試這個flash-message代碼段

該代碼也不安全:密碼以明文形式存儲在MongoDB中,因此任何可以獲取數據庫備份副本的人都知道您用戶的密碼。 在將密碼存儲在數據庫中之前,應先對其加鹽並對其進行哈希處理。

當然,您應該要求HTTPS安全連接才能使用戶登錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM