首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python --当使用curl发送请求时,Flask能处理会话吗?

python --当使用curl发送请求时,Flask能处理会话吗?
EN

Stack Overflow用户
提问于 2016-10-16 03:17:44
回答 1查看 2.4K关注 0票数 1

我正在为我的iOS移动应用程序构建一组app。

我使用Flask-RESTful' to build RESTful type of interfaces and烧瓶- login‘来帮助我处理用户登录问题。

但是,我发现当我使用curl登录时,服务器确实返回成功消息,同时我发送一个请求以获得一个只有登录的用户才能看到和得到的“受保护的”页面。

{“消息”:“服务器无法验证您是否有权访问所请求的URL。您要么提供了错误的凭据(例如错误的密码),要么您的浏览器不知道如何提供所需的凭据。”

如果curl不发送一些“用户凭据”,这是否意味着当我的iOS应用程序发送请求时,后端仍然无法识别用户?

我不太明白如何处理‘会话’,我是新的网页开发。有什么解决办法吗?

这是我的代码:

api.py

代码语言:javascript
复制
# -*- 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

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import flask_login
from app import login_manager


users = {'foo@bar.tld': {'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

代码语言:javascript
复制
# -*- 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

代码语言:javascript
复制
# -*- 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)
EN

回答 1

Stack Overflow用户

发布于 2016-10-16 05:16:56

默认情况下,Flask使用cookie管理会话。引用会议文件

这是在cookies之上为您实现的,并以加密方式对cookie进行签名。这意味着用户可以查看cookie的内容,而不是修改它,除非他们知道用于签名的秘密密钥。

你可以用卷曲来管理曲奇。请参阅这个答案

写入cookie文件并启动引擎,并使用可以使用的cookie:curl -c /path/to/cookiefile http://yourhost/

要从cookie引擎读取cookie并启动它,或者如果它不是一个文件,它将传递给给定的字符串。curl -b /path/to/cookiefile http//yourhost/

另一个可以遵循的模式是服务器侧会话

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40066469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档