私はコーディングが初めてです。Flask
を使用してログイン機能を設定しましたflask-JWT
。これまでのところ、("/login" で) ログインでき、トークンは を使用して生成されjwt
ます。
ただし、ラッパー (@token_required) を使用して保護されている他のルートもあります。ユーザーがログインすると、トークンが他の保護されたページに渡され、アクセスできるようにしたいと思います。
これらは私のコードです:
ページを保護するラッパー
def token_required(f): #wrapper for token auth
@wraps(f)
def decorated(*args, **kwargs):
token = request.args.get('token')
if 'x-access-token' in request.headers:
token = request.headers['x-access-token']
if not token:
return jsonify({'message': 'Token is missing!'}), 401
try:
data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=["HS256"])
current_u = User.query.filter_by(username=data['user']).first()
#identify user, otherwise, return error
except:
return jsonify({'message': 'Token is invalid!'}), 401
return f(current_u, *args, **kwargs) #previously return f(*args, **kwargs)
return decorated
ログインルート
@app.route('/login', methods=['GET', 'POST']) #login route
def login():
auth = request.authorization
if not auth or not auth.username or not auth.password:
return make_response('Could not verify', 401, {'WWW-Authenticate': 'Basic realm = "Login Required!"'})
user = User.query.filter_by(username=auth.username).first()
if not user:
return make_response('Could not verify', 401, {'WWW-Authenticate': 'Basic realm = "Login Required!"'})
if user.check_password(auth.password):
token = jwt.encode({'user': auth.username, 'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=2)}, app.config['SECRET_KEY'])
return jsonify({'message': 'hello ' + user.username}, {'token': token})
return make_response('Could not verify', 401, {'WWW-Authenticate': 'Basic realm = "Login Required!"'})
ラッパーを使用した保護されたルート
@app.route('/protected') #protected routes
@token_required
def protected(current_u):
return jsonify({'message' : 'This is only for people with valid tokens'})
これに特化したチュートリアルを見つけることができないため、この時点で立ち往生しています/おそらく、何を検索すればよいかわからないという問題もあります。誰か助けてくれませんか?