2016-06-03 5 views
1

응용 프로그램의 API 부분에 Flask Restless 0.17 및 Flask JWT를 사용하고 있습니다. 어플리케이션 프론트 엔드에서는 Flask WTF와 CSRF 보호 기능을 사용하고 있습니다.Flask Restless CSRF 면제 인증 URL

이것은 Flask와 관련된 문제입니다. WTF는 모든보기에서 CSRF 토큰을 기대하기 때문에 불안합니다. API의 청사진을 면제 해 작성한 엔드 포인트에서이 문제를 해결할 수 있지만 Flask JWT created/auth URL에이를 적용하는 방법을 알 수는 없습니다.

API의시 초기화 : 나는 위처럼 작업을 수행하는 방법을 알아낼 수

def init_app(app): 
    def authenticate(username, password): 
     user = User.query.filter_by(username=username).scalar() 
     if user and username == user.username and \ 
       User.check_password(user, password): 
      return user 
     return None 

    def load_user(payload): 
     user = User.query.filter_by(id=payload['identity']).scalar() 
     return user 

    jwt = JWT(app, authenticate, load_user) 

    @jwt_required() 
    def auth_func(**kw): 
     pass 

    manager = flask_restless.APIManager(app, flask_sqlalchemy_db=db) 

    bp = manager.create_api_blueprint(
     MyModel, 
     methods=['GET'], 
     url_prefix='/api/v1', 
     preprocessors=dict(GET_SINGLE=[auth_func], 
          GET_MANY=[auth_func]), 
     results_per_page=10, 
    ) 

    # Here I can exempt this API endpoint. 
    # But how do I exempt /auth which is created by Flask JWT? 
    csrf_protect.exempt(bp) 
    app.register_blueprint(bp) 

답변

0

, 그래서 내가 대신 WTF CSRF 보호를 해제하고 우리가 API 엔드 포인트에 없을 때 다음을 할 수 있습니다.

settings.py

WTF_CSRF_CHECK_DEFAULT = False 

app.py

def register_csrf(app): 
    """ 
    Only enable CSRF protection on URLs that are not API related. 
    :param app: The app 
    """ 
    @app.before_request 
    def check_csrf(): 
     if request.endpoint != 'api': 
      csrf_protect.protect() 
관련 문제