Создание веб-сервиса для входа в python с помощью торнадо

Просто для того, чтобы знать, как работает торнадо (я начинающий с python и торнадо) для предоставления услуг на странице входа. У меня есть HTML-страница, которая отправляет параметры как {"data":{"Email":"adsf","Password":"asdf","Type":3}}но я не знаю, как получить параметры в торнадо.

мой логин

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

заранее спасибо

Я просто новичок.

1 ответ

Пожалуйста, внимательно прочитайте руководство 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-сообщения.

Этот код также небезопасен: пароли хранятся в MongoDB в открытом виде, поэтому любой, кто может получить копию резервной копии базы данных, знает пароли ваших пользователей. Пароли должны быть засолены и хешированы перед сохранением в базе данных.

И, конечно же, для входа в систему вам потребуется защищенное соединение HTTPS.

Другие вопросы по тегам