Tornado - L'argument '_xsrf' manquant dans le POST
Comme on peut le voir dans le code suivant, j'ai un GET
pour l'enregistrement, que les délégués de son travail à POST
.
class RegistrationHandler(tornado.web.RequestHandler):
def get(self):
s = """
<h1>Register</h1>
<form method="post" action="/register">
<div>
<label>User</label>
<input name="user_name" value="[email protected]"/>
</div>
<div>
<label>password</label>
<input name="password" type="password"/>
</div>
<div>
<input type="submit" value="submit"/>
</div>
</form>
"""
self.write(s)
@log_exception()
def post(self):
user_name = self.request.arguments['user_name']
password = self.request.arguments['password']
log.debug('Registering user with credentials %r' % (user_name, password))
with sa_session() as db_session:
User.register(user_name, password, db_session)
Lorsque j'accède à l'URL de mon navigateur, j'obtiens un formulaire d'inscription, après la présentation de qui je reçois "403: Forbidden".
Journal de la Console:
2012-10-15 11:27:42,482 - __main__ - DEBUG - Starting server on port 8080
2012-10-15 11:27:49,377 - root - INFO - 304 GET /register (127.0.0.1) 0.78ms
2012-10-15 11:27:53,143 - root - WARNING - 403 POST /register (127.0.0.1): '_xsrf' argument missing from POST
2012-10-15 11:27:53,144 - root - WARNING - 403 POST /register (127.0.0.1) 1.05ms
Que fait cette erreur et comment puis-je la corriger? Merci.
source d'informationauteur missingfaktor
Vous devez vous connecter pour publier un commentaire.
J'imagine que vous avez Cross-site request forgery activé les cookies dans les paramètres de votre
(par défaut il est sur).
Tornade XSRF est ici
Pour résoudre ce de la désactiver dans les paramètres de votre:
Remarque: Normalement, vous ne voulez pas désactiver cette fonction et, normalement, vous auriez la génération de code HTML dans un modèle comme celui-ci: Veuillez noter que le xsrf peu ce qui ajoute de la XSRF cookie.
---EDIT à la suite des commentaires---
Au lieu de:
Faire:
ou mieux:
(et la mettre dans votre répertoire de modèles)
il y a un conflit :
comment voulez-vous faire
get
et dans la forme que vous mettezmethod="post"
? ce pourquoi il esterror 403
si vous utilisez
get
alors vous n'aurez pas besoin d'unxsrf
de protection. le reste, à vous de l'ajouter après la déclaration du formulairede sorte que le xsrf vous trouverez un tag caché dans votre rendu html.