ノートを実行する:私はこのvideo tutorial and playlistを使用したフレームワークpostメソッド403禁断のページをレンダリングする代わりにPOSTメソッドのコード
を再生するには新しいです、私は、単純なWebアプリケーションを作成するために管理します。
問題:routesファイル内
POST
方法が必要とPOSTコードを実行していないようです。
以下のルートファイルを指定すると、localhost:{port}/user/register
にアクセスすると、GET
が要求され、register view
がレンダリングされて返されます。
register view
フィールドに記入し、submit
をクリックすると、(入力フィールドをクリアしてから)ページを更新し、method="post"
がregister view
にform
に追加されている場合に期待される「登録」テキスト
を示してい、即時403 Forbidden page
ページが表示されます。
「登録された」テキストが表示されないのはなぜですか、何が間違っている(間違っている)のですか?
ルートファイル:
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)
コントローラ:
HomeController
LoginController
LoginController方法:
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"); }
登録ビュー:
@()
<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>
を
コンソール出力誤差:
[warn] p.filters.CSRF - [CSRF] Check failed because no or invalid token found in body
[warn] p.filters.CSRF - [CSRF] Check failed with NoTokenInBody
私は、この問題(フィルタなど)に関する詳細な情報を読んで、問題の原因となっているものをもっと詳しく知りました。私は文書に気づいたが、特定のルートのCSRFチェックを無効にするオプションが存在する。これはルートファイルの 'post'ルートの上に' + nocsrf'を置くことによって行われます( 'post'メソッドごとにCSRFフィルタのバイパスが必要です)。あなたのCRSFフィルタをインクルードし、それはちょっとしたことだったので、ありがとう! – KGCybeX
@KGCybeXは動作しますが、回避策であり、CSRFが提供する安全性を取り除いています。展開した場合は、機密性の高いPOSTを行っています。 – NateH06