[英]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.