2016-05-17 4 views
0

ユーザーがユーザー名なしで保護されたページにアクセスできるFlaskプロジェクトの非常に簡単なユーザー認証を実装する必要があります。私は既にFlask-BasicAuthの拡張子をチェックしましたが、あまりにも "たくさん"あります。ユーザー名を使用する必要があります。私はちょうど特定のページとそのサブページにアクセスするために使用することができる文字列としてパスワードを含むフラスコファイル内のリストを宣言したいと思います。アノムパスワードはFlaskでユーザー名のないページを保護する

だから私の目標は、このような何かを達成することである。

  1. ユーザーは
  2. (データベースに保存されている静的とそうでないもの)xy.com/protected-pageに到着し、passwords = ['pass1', 'pass2', 'pass3']からパスワードを使用してログインに成功した後、彼は/彼女は私がセッション時間を設定することができれば、それは本当に素晴らしいボーナスでしょう...

xy.com/protected-pagexy.com/protected-page/sub-page1, xy.com/protected-page/sub-page2などを見ることができます。

可能ですか?私はフラスコにとってはとても新しいので、誰かが私を助けてくれるかどうかは分かります。

+0

はい、すべて可能です。何を試しましたか?どのような特定の問題がありますか?質問を編集して[最小限の、完全で検証可能な例](https://stackoverflow.com/help/mcve)を作成してください。 – dirn

答えて

2

Flask-Loginには一般的なユーザー名の警告が使用されています。そこにはAnonymousUserMixinクラスがあり、あなたが探しているものと正確に同じかもしれないと言いました。

from flask import Flask, render_template, redirect, request, url_for 
import flask.ext.login as flask_login 
from flask.ext.login import LoginManager, UserMixin 

login_manager = LoginManager() 

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

login_manager.init_app(app) 

users = {'user1':{'pw':'pass1'}, 
     'user2':{'pw':'pass2'}, 
     'user3':{'pw':'pass3'}} 

class User(UserMixin): 
    pass 

@login_manager.user_loader 
def user_loader(username): 
    if username not in users: 
    return 

    user = User() 
    user.id = username 
    return user 

@login_manager.request_loader 
def request_loader(request): 
    username = request.form.get('username') 
    if username not in users: 
    return 

    user = User() 
    user.id = username 

    user.is_authenticated = request.form['pw'] == users[username]['pw'] 

    return user 



@app.route('/', methods=['GET', 'POST']) 
def index(): 
    if request.method == 'POST': 
    username = request.form.get('username') 
    if request.form.get('pw') == users[username]['pw']: 
     user = User() 
     user.id = username 
     flask_login.login_user(user) 
     return redirect(url_for('protect')) 
    return render_template('index.html') 

@app.route('/protect') 
@flask_login.login_required 
def protect(): 
    return render_template('protected.html') 

@app.route('/logout') 
def logout(): 
    flask_login.logout_user() 
    return 'Logged out' 

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

テンプレート/ index.htmlを

<html> 
    <title>Test</title> 
    <h1>Welcome</h1> 
    <form method='POST'> 
    <input type='text' name='username'>Username</input> 
    <input type='password' name='pw'>Password</input> 
    <input type='submit' name='submit'>Submit</input> 
    </form> 
</html> 

テンプレート/ protected.html

<html> 
    <title>Test</title> 
    <h1>Protected</h1> 
</html> 

プロジェクト構造

. 
├── app.py 
└── templates 
    ├── index.html 
    └── protected.html 
+0

これは完璧に動作しています!私はAnonymousUserMixinをチェックします。 – gatto

+0

代わりにこれを使いたいかもしれません: 'flask.ext.login import login_required'。それは簡単な変更ですが、 '@ login_required'だけでビュー関数を飾ることができます。 – wgwz

関連する問題