Anmerkung: Ich bin Framework zu Spielenpost-Methode 403 verbotene Seite Rendering statt Ausführung post-Methode Code
dieses video tutorial and playlist Mit schaffe ich eine einfache Webapp zu erstellen.
Problem:
POST
Methoden in Routen Datei scheinen nicht den erforderlichen POST Code auszuführen.
Wenn Sie die routes-Datei unten angeben, wird bei der Suche nach localhost:{port}/user/register
ein GET
angefordert, wodurch die register view
gerendert und zurückgegeben wird.
Ausfüllen der register view
Felder und submit
klicken, aktualisiert die Seite (durch die Eingabefelder Clearing) und zeigt die erwartete „registriert“ text
Wenn method="post"
zum form
hinzugefügt wurde im register view
, ein sofortige 403 Forbidden page
Seite wird angezeigt.
Warum wird nicht der "registrierte" Text angezeigt, was fehlt mir (falsch gemacht)?
Routen-Datei:
GET / controllers.HomeController.index
GET /user controllers.LoginController.index()
GET /user/login controllers.LoginController.login()
POST /user/login controllers.LoginController.doLogin()
GET /user/register controllers.LoginController.register()
POST /user/register controllers.LoginController.doRegister()
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
Controller:
HomeController
LoginController
LoginController Methoden:
public Result index() { return ok(views.html.user.index.render(User.getAllUsers())) }
public Result login() { return ok(login.render()); }
public Result doLogin() { return ok("registered"); }
public Result register() { return ok(register.render()); }
public Result doRegister() { return ok("registered"); }
Register anzeigen:
@()
<html>
<head>
<title>Register new User</title>
</head>
<body>
<h1>Register User</h1>
<br>
<br>
Enter Email Address: <input type="password" name="confirmPassword">
Enter Password: <input type="password" name="confirmPassword">
Confirm Password: <input type="password" name="confirmPassword">
<br>
<br>
<form action="@routes.LoginController.doRegister()">
<input type="submit" value="Register"/>
</form>
</body>
</html>
Console Ausgabefehler:
[warn] p.filters.CSRF - [CSRF] Check failed because no or invalid token found in body
[warn] p.filters.CSRF - [CSRF] Check failed with NoTokenInBody
Ich habe umfangreiche Lektüre zu diesem Thema (Filter, etc), um eine bessere Idee zu bekommen, was das Problem verursacht. Ich habe in der Dokumentation festgestellt, dass es eine Option gibt, die CSRF-Prüfung für eine bestimmte Route zu deaktivieren. Dies geschieht, indem man '+ nocsrf' über die' post'-Route in der routes-Datei setzt (für jede 'post'-Methode muss man den CSRF-Filter umgehen). Ich sollte deine vorgeschlagene Methode anwenden, um den CRSF-Filter einzuschließen, Da es ein wenig vage war. Danke! – KGCybeX
@KGCybeX, das funktioniert - aber ist eine Umgehungslösung und entfernt die Sicherheit, die die CSRF bietet. Wenn Sie jemals bereitstellen, sicher sein, dass das CSRF-Token dort mit der Überprüfung, wenn Sie ' um einen sensiblen POST zu machen. – NateH06