Maison  >  Article  >  développement back-end  >  Comment implémenter l'authentification de l'identité de l'utilisateur sous Tornado en Python

Comment implémenter l'authentification de l'identité de l'utilisateur sous Tornado en Python

不言
不言avant
2018-10-20 15:21:313762parcourir
Le contenu de cet article concerne la méthode de mise en œuvre de l'authentification de l'identité de l'utilisateur sous Tornado en Python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Il existe un attribut current_user dans la classe RequestHandler de Tornado pour enregistrer le nom d'utilisateur de la requête en cours. La valeur par défaut de RequestHandler.get_current_user est None. Cet attribut peut être lu à tout moment dans les fonctions de traitement telles que get() et post() pour obtenir le nom d'utilisateur actuel. RequestHandler.current_user est une propriété en lecture seule, donc si vous souhaitez définir la valeur de la propriété, vous devez surcharger la fonction RequestHandler.get_current_user() pour définir la valeur de la propriété.

Exemple : utilisez l'attribut RequestHandler.current_user et la méthode RequestHandler.get_current_user() pour implémenter le contrôle de l'identité des utilisateurs.

Code :

import tornado.web
import tornado.ioloop
import uuid  #UUID 生成库

dict_sessions={}  #保存所有登录的Session

class BaseHandler(tornado.web.RequestHandler):  #公共基类
    #写入current_user的函数
    def get_current_user(self):
        session_id=self.get_secure_cookie("session_id")
        return dict_sessions.get(session_id)

class MainHandler(BaseHandler):
    @tornado.web.authenticated    #需要身份认证才能访问的处理器
    def get(self):
        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">'
                   '<input type="submit" value="Sign in">'
                   '</form></body></html>')
    def post(self):  #验证是否运行登陆
        if len(self.get_argument("name"))<3:
            self.redirect("/login")
        session_id=str(uuid.uuid1())
        dict_sessions[session_id]=self.get_argument("name")
        self.set_secure_cookie("session_id",session_id)
        self.redirect("/")
setting={
    "cookie_secret":"SECRET_DONT_LEAK", #Cookie加密秘钥
    "login_url":"/login"  #定义登陆页面
}
application=tornado.web.Application([
    (r"/",MainHandler),        #URL映射定义
    (r"/login",LoginHandler)
],**setting)

def main():
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()     #挂起监听

if __name__ == '__main__':
    main()

Cet exemple illustre un cadre de programmation complet d'authentification d'identité. Le concept général est le suivant :

  • Enregistrer avec un dictionnaire global. dict_sessions Informations sur l'utilisateur connecté. Pour plus de simplicité, cet exemple enregistre uniquement la paire clé-valeur de [ID de réponse : nom d'utilisateur].

  • Définissez la classe de base publique BaseHandler, qui hérite de tornado.web.RequestHandler et est utilisée pour définir les propriétés publiques et les comportements de tous les processeurs de ce site Web. Surchargez sa fonction get_current_user(), qui est automatiquement appelée par Tornado lors de l'accès à la propriété RequestHandler.current_user. Cette fonction utilise d'abord get_secure_cookie() pour obtenir l'ID de session de cette visite, puis utilise l'ID pour obtenir le nom d'utilisateur de dict_sessions et le renvoie.

  • La classe MainHandler est une instance de gestionnaire qui nécessite une authentification de l'utilisateur pour y accéder. La fonction de traitement get() dans ce processeur utilise le décorateur tornado.web.authenticated. Avant l'exécution, la fonction de traitement avec ce décorateur détermine le statut d'authentification de l'utilisateur selon que current_user a reçu une valeur. Si elle a été attribuée, elle peut. Faites la logique normale, sinon redirigez automatiquement vers la page de connexion du site Web.

  • La classe LoginHandler est un processeur de page de connexion. Sa fonction get() est utilisée pour restituer la page de connexion, et sa fonction post() est utilisée pour vérifier si l'utilisateur est autorisé à le faire. se connecter.

  • Donnez l'adresse de la page de connexion du site Web via le paramètre login_url dans la fonction d'initialisation de tornado.web.Application. Cette adresse est utilisée par le décorateur tornado.web.authenticated pour rediriger vers une URL lorsqu'il est découvert que l'utilisateur n'a pas été authentifié.

Remarque : tous les gestionnaires de pages qui rejoignent l'authentification d'identité doivent hériter de la classe BaseHandler au lieu d'hériter directement de la classe tornado.web.RequestHandler d'origine.

L'authentification de l'identité commerciale doit améliorer davantage de contenu, comme l'ajout d'un mécanisme de vérification du mot de passe, la gestion du délai d'expiration de connexion, l'enregistrement des informations utilisateur dans la base de données, etc.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer