2017-03-25 10 views
0

私はPythonとフラスコでテキストベースのブラウザゲームを作っていますが、私は奇妙な問題に遭遇しました。Python Flaskの悪い要求

私のウェブサイトにログインしようとすると、「不正なリクエスト」エラーが発生します。

これは私のログインルートです:

@app.route('/login/', methods=['GET','POST']) 
 
def login(): 
 
    if current_user.is_authenticated: 
 
     return redirect("/game/", code=302) 
 

 
    # when the form is filled in 
 
    if request.method == 'POST': 
 

 
     # register the user 
 
     if request.form['regSubmit'] == 'regSubmit': 
 
      username = request.form['regUser'] 
 
      password = request.form['regPassword'] 
 
      address = request.form['regAddress'] 
 
      register_user(username=username,password=password,address=address) 
 
      print(address) 
 
      return redirect("/login/", code=302) 
 

 
\t \t # login user 
 
     if request.form['logSubmit'] == 'logSubmit': 
 
      print('lol') 
 
      username = request.form['logUser'] 
 
      password = request.form['logPassword'] 
 
      result = users.find_one({"user": username}) 
 

 
      if result and check_password_hash(result['password'], password): 
 
       user_obj = User(result['_id']) 
 
       login_user(user_obj) 
 
       return redirect("/game/", code=302) 
 

 
    return render_template('out.html')

これは私のログインモーダルです:

\t <div id="loginModal" class="modal fade"> 
 
\t <div class="modal-dialog"> 
 
\t  <div class="modal-content"> 
 
\t  <div class="modal-header"> 
 
\t   <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
 
\t   <h4 class="modal-title">Login</h4> 
 
\t  </div> 
 

 
\t  <form method="post"> 
 
\t \t  <div class="modal-body"> 
 
\t \t   <p>Please enter your username and password.</p> 
 
\t \t   <div class="form-group"> 
 
\t \t \t \t <label class="control-label" for="logUser">Username</label> 
 
\t \t \t \t <input type="text" name="logUser" class="form-control" id="logUser"> 
 
\t \t \t \t </div> 
 
\t \t \t \t <div class="form-group"> 
 
\t \t \t \t <label class="control-label" for="logPassword">Password</label> 
 
\t \t \t \t <input type="password" name="logPassword" class="form-control" id="logPassword"> 
 
\t \t \t \t </div> 
 
\t \t  </div> 
 
\t \t  <div class="modal-footer"> 
 
\t \t   <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
 
\t \t   <button type="submit" name="logSubmit" value="logSubmit" class="btn btn-primary">Submit</button> 
 
\t \t  </div> 
 
\t  </form> 
 

 
\t  </div> 
 
\t </div> 
 
\t </div>

+0

これに関連するコードをいくつか追加できますか?上記のコードでは、あなたを助けることができません。 – Pradeepb

+0

これで十分です。私はpython、フラスコ、pymongo、フラスコログインを使用する – ruttydm

答えて

2

私はあなたのコードが失敗していると信じてrequest.form['regSubmit']にアクセスしようとしているため、このフィールドはフォームに存在しません。存在しないフォームフィールドにアクセスすると、Flaskは400 Bad Requestエラーを返します。

これを回避するには、ログインと登録アクションを異なるFlaskビューに送信するか、try...exceptブロックを使用して、存在しないフォームフィールドにアクセスすることによって生成されたKeyErrorをキャッチします。

+0

ありがとう、私はそれを試してみます。 – ruttydm

関連する問題