2017-11-13 8 views
0

チュートリアル(https://www.youtube.com/watch?v=VW8qJxy4XcQ)を見て、フラスコ内のウェブページに簡単にログインすることができました。私はそれを数回試しましたが、正しいユーザー名とパスワードを入力すると(私のデータを覚えておくために保存ボックスが表示されます)、編集テキストの小さなボックスが消えて、再度尋ねられます。私は間違って何をしていますか?フラスコにログインできません - 常にユーザー名とパスワードを尋ねます

おかげ

from flask import Flask, render_template, request, make_response 
import os 
app = Flask(__name__) 


@app.route('/pass') 
def index(): 
    if request.authorization and request.authorization.username == 'a' and request.authorization.password == 'a': 
     return 'logged in' 
     #return render_template("index2.html") 
    else: 
     return make_response('Could not verify!', 401, {'WWW-Authenticate' : 'Basic realm=Login required'}) 

if __name__ == "__main__": 
    app.run(debug=True) 

のVirtualHost:

<VirtualHost *:80> 
       ServerName 39.234.23.12 
       ServerAdmin [email protected] 
       WSGIScriptAlias//var/www/FlaskApp/flaskapp.wsgi 
       <Directory /var/www/FlaskApp/FlaskApp/> 
         Order allow,deny 
         Allow from all 
       </Directory> 
       Alias /static /var/www/FlaskApp/FlaskApp/static 
       <Directory /var/www/FlaskApp/FlaskApp/static/> 
         Order allow,deny 
         Allow from all 
       </Directory> 
       ErrorLog ${APACHE_LOG_DIR}/error.log 
       LogLevel warn 
       CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost> 

、ローカルそれをやってのにもかかわらず、Googleではなく上、仕事の仮想インスタンスを曇らせるませんでした:

import os 
from flask import Flask, render_template, request 

app = Flask(__name__) 

APP_ROOT = os.path.dirname(os.path.abspath(__file__)) 

@app.route("/") 
def index(): 
    if request.authorization and request.authorization.username == 'a' and request.authorization.password == 'a': 
     return "success" 
    return "nope" 
+1

これは非常に奇妙です。私はあなたのコードをチェックしています。セットアップに何か他に何かありますか? – Nurjan

+0

お返事ありがとうございました!他に何が影響を与えることができますか? – Marci

+0

どのバージョンのフラスコ、あなたはpythonを使用していますか?どのブラウザを使用していますか? – Nurjan

答えて

1

authorizationとは別に、フォーム入力を検討することもできます。簡単なログインシステムを作成する簡単な例を次に示します。

app.pyは:

from flask import Flask, request, render_template, flash 

app = Flask(__name__) 
app.secret_key = 'TOO_SECRET_TO_REVEAL' 

@app.route('/',methods = ["GET", "POST"]) 
def index(): 
    if request.method == "POST": 
     username = request.form.get("username", None) 
     password = request.form.get("password", None) 
     if username == "shovon" and password=="password": 
      flash("Login successful") 
     else: 
      flash("Wrong username or password") 
    return render_template("simple_login.html") 

if __name__ == '__main__': 
    app.run(debug = True) 

次にtemplatesフォルダにsimple_login.htmlは含まれています

<!DOCTYPE html> 
<html> 
<head> 
    <title>Simple Login</title> 
</head> 
<body> 
    {% with flash_messages = get_flashed_messages() %} 
     {% if flash_messages %} 
      <ul> 
       {% for message in flash_messages %} 
        <li> 
         {{ message }} 
        </li> 
       {% endfor %} 
      </ul> 
     {% endif %} 
    {% endwith %} 
    <form action="/" method="post"> 
     Username: <input type="text" name="username" /> <br> 
     Password: <input type="password" name="password" /> <br> 
     <input type="submit" name="login" value="Login" /> 
    </form> 
</body> 
</html> 

出力:

login_demo

flashの詳細を見るmessage flashing

+0

ありがとうございますが、メソッドが許可されていません メソッドは要求されたURLに対して許可されていません。理由は何ですか? – Marci

+0

ローカルマシンでコードを実行しており、スムーズに実行しています。ホストでフラスコを正しく設定しましたか?完全なトレースバックを投稿できますか? – arsho

+0

あなたは正しいです、私はそれをローカルで試してみて、それは完全に機能しました。完全なトレースバックではどういう意味ですか?フラスコが正しくセットされているかどうか確認するにはどのようなファイルが必要ですか?どうもありがとう! – Marci

0

コードはうまくいくはずで、ブラウザの問題に似ています。ブラウザの設定をデフォルトにリセットしてみてください。

は問題はコンソールで、最初のチェックのデバッグログを持続し、ログイン後の応答ステータスコードを試みていることを確認する前に、何である見るために許可を確認した後、200

127.0.0.1 - - [13/Nov/2017 17:33:10] "GET /pass HTTP/1.1" 200 

印刷アウトrequest.authorizationであること渡さ:

def index(): 
    print(request.authorization) 
    if request.authorization and request.authorization.username == 'a' and request.authorization.password == 'a': 
     print(request.authorization) 
     return 'logged in' 
    else: 
     return make_response('Could not verify!', 401, {'WWW-Authenticate' : 'Basic realm=Login required'}) 

ファーストプリントはいずれもあってはならないと承認した後、第2のプリントは、ユーザー名とパスワードを使用して、辞書のようになります。

{'username': 'a', 'password': 'a'} 

承認に成功すると、両方ともユーザー名とパスワードの辞書が返されます。

+0

申し訳ありません、私はフラスコを初めて使いました。どこでデバッグログが表示されているのか、プリントステートメントの結果をどこで確認できますか?おかげで – Marci

+0

通常は、コンソールウィンドウで、サーバーを起動するのと同じウィンドウが表示されます。 – Borut

+0

私はGoogleの雲仮想インスタンスを持っており、この仮想ホストを指定しました。これに何か問題がありますか? https://pastebin.com/h2gjX6K5 – Marci

関連する問題