我正在嘗試爲iOS移動應用程序構建一組API。python - 使用curl發送請求時,Flask可以處理會話嗎?
我使用Flask-RESTful' to build RESTful type of interfaces and
Flask-login`來幫助我處理用戶登錄問題。
然而,我發現,當我用curl
登錄,服務器不會返回成功消息,而我則發送請求到得到「保護」頁面,只有登錄的用戶可以看到和得到
「」message「:」服務器無法驗證您是否有權訪問請求的URL。您提供了錯誤的憑據(例如錯誤的密碼),或者瀏覽器不知道如何提供所需的憑據。 「 }
如果curl
不發送一些「用戶證書」,這是否意味着,當我的iOS應用程序發送請求,後端仍不能識別用戶?
我不太瞭解Flask是如何處理'session'的,而我是web開發新手。有沒有解決方法?
這裏是我的代碼:
api.py
# -*- coding: utf-8 -*-
import flask_login, json
from flask import request
from flask_restful import Resource, reqparse
from models import users, User
parser = reqparse.RequestParser()
def request_parser():
parser.add_argument('data', action='append')
return parser.parse_args()['data'][0]
class Login(Resource):
def get(self):
return
def post(self):
# data = request_parser()
data = request.json['data']
email = data['email']
test = users[email]
if data['pw'] == users[email]['pw']:
user = User()
user.id = email
flask_login.login_user(user)
return 'login success'
return 'Bad login'
class Protected(Resource):
@flask_login.login_required
def get(self):
return 'Logged in as: ' + flask_login.current_user.id
models.py
# -*- coding: utf-8 -*-
import flask_login
from app import login_manager
users = {'[email protected]': {'pw': 'secret'}}
class User(flask_login.UserMixin):
pass
@login_manager.user_loader
def user_loader(email):
if email not in users:
return
user = User()
user.id = email
return user
@login_manager.request_loader
def request_loader(request):
email = request.form.get('email')
if email not in users:
return
user = User()
user.id = email
user.is_authenticated = request.form['pw'] == users[email]['pw']
return user
__init__.py
# -*- coding: utf-8 -*-
from flask import Flask
from flask_restful import Resource, Api
from flask_sqlalchemy import SQLAlchemy
import flask_login
import config
app = Flask(__name__)
app.config.from_object("config")
app.secret_key = 'yangjinglei'
api = Api(app)
login_manager = flask_login.LoginManager()
login_manager.init_app(app)
db = SQLAlchemy(app, use_native_unicode="utf8")
run.py
# -*- coding: utf-8 -*-
from app import app, api
from app.api import *
api.add_resource(Login, '/login')
api.add_resource(Protected, '/protected')
if __name__ == '__main__':
app.run(debug=True)