早上好,知更鸟 2023-03-24 15:34 采纳率: 80%
浏览 19
已结题

关于Flask后端出现401报错的问题

我是用flutter前端来访问flask后端的API,结果出现了401报错,是不是少了个什么授权的东西,要如何解决
报错

img

这是我的后端代码

from flask import Flask, request
from flask_restful import Resource, Api
from flask_cors import CORS
import hashlib
import pymysql

app = Flask(__name__)
api = Api(app)
CORS(app)

conn = pymysql.connect(host='localhost', user='root', password='123456789', db='python_mysqlclient_test', charset='utf8mb4',
                       cursorclass=pymysql.cursors.DictCursor)


class Register(Resource):
    def post(self):
        data = request.json
        username = data.get('username')
        password = data.get('password')
        hash_password = hashlib.sha256(password.encode()).hexdigest()

        cursor = conn.cursor()
        cursor.execute('SELECT * FROM app01_userinfo WHERE username=%s', (username,))
        result = cursor.fetchone()

        if result:
            return {'message': 'User already exists.'}, 400

        cursor.execute('INSERT INTO app01_userinfo (username, password) VALUES (%s, %s)', (username, hash_password))
        conn.commit()

        return {'message': 'Registration successful.'}, 201


class Login(Resource):
    def post(self):
        data = request.json
        username = data.get('username')
        password = data.get('password')
        hash_password = hashlib.sha256(password.encode()).hexdigest()

        cursor = conn.cursor()
        cursor.execute('SELECT * FROM app01_userinfo WHERE username=%s AND password=%s', (username, hash_password))
        result = cursor.fetchone()

        if not result:
            return {'message': 'Invalid credentials.'}, 401

        return {'message': 'Login successful.'}, 200,print("login成功")


api.add_resource(Register, '/register')
api.add_resource(Login, '/login')

if __name__ == '__main__':
    app.run(host="0.0.0.0",debug=True)

以下是flutter前端代码


import 'package:flutter/material.dart';
import 'package:dio/dio.dart';

class Myapp extends StatefulWidget {
  const Myapp({Key? key}) : super(key: key);

  @override
  State<Myapp> createState() => _MyappState();
}

class _MyappState extends State<Myapp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'test',
      home: Scaffold(
        body: LoginScreen(),
    ),
    );
  }
}


class LoginScreen extends StatefulWidget {
  @override
  _LoginScreenState createState() => _LoginScreenState();
}

class _LoginScreenState extends State<LoginScreen> {
  final _formKey = GlobalKey<FormState>();
  final _usernameController = TextEditingController();
  final _passwordController = TextEditingController();

  Future<void> _login() async {
    final username = _usernameController.text;
    final password = _passwordController.text;

    try {
      final response = await Dio().post(
        'http://192.168.2.7:5000/login',
        data: {'username': username, 'password': password},
      );

      // handle successful login
    } catch (e) {
      // handle login failure
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Login'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              TextFormField(
                controller: _usernameController,
                decoration: InputDecoration(
                  labelText: 'Username',
                ),
                validator: (value) {
                  if (value!.isEmpty) {
                    return 'Please enter your username';
                  }
                  return null;
                },
              ),
              TextFormField(
                controller: _passwordController,
                decoration: InputDecoration(
                  labelText: 'Password',
                ),
                obscureText: true,
                validator: (value) {
                  if (value!.isEmpty) {
                    return 'Please enter your password';
                  }
                  return null;
                },
              ),
              SizedBox(height: 16.0),
              ElevatedButton(
                child: Text('Login'),
                onPressed: () {
                  if (_formKey.currentState!.validate()) {
                    _login();
                  }
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

void main(){
  runApp(Myapp());
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 已结题 (查看结题原因) 3月24日
    • 修改了问题 3月24日
    • 创建了问题 3月24日

    悬赏问题

    • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
    • ¥15 虚拟机检测,可以是封装好的DLL,可付费
    • ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)
    • ¥30 使用matlab将观测点聚合成多条目标轨迹
    • ¥15 Workbench中材料库无法更新,如何解决?
    • ¥20 如何推断此服务器配置
    • ¥15 关于github的项目怎么在pycharm上面运行
    • ¥15 内存地址视频流转RTMP
    • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
    • ¥15 有没有整苹果智能分拣线上图像数据