ครับในส่วนนี้สามารถทำงานได้ทั้ง pyhton2 และ python3 ครับ แค่ปรับเวอร์ชั่น requests .ให้สอดคล้องกับเวอร์ชั่นของ python ที่ใช้
- endpoint ของ '/auth' สร้างมาเพื่อรองรับการเรียก
โค้ดในส่วนของ endpointต่อมาโค้ดในส่วนของที่มีปัญหาในการเรียกใช้งานบน python3โค้ด: เลือกทั้งหมด
@app.route('/auth', methods=['POST']) def auth_endpoint(): data = request.json username = data.get('username') password = data.get('password') cur = con.cursor() try: sql = """SELECT id, password FROM "user" WHERE username = %s""" cur.execute(sql, (username,)) result = cur.fetchone() if result: user_id, db_password = result if password == db_password: access_token = create_access_token(identity={'username': username}) return jsonify(access_token=access_token), 200 else: return jsonify({"msg": "Invalid credentials"}), 401 finally: cur.close()
หากแต่ว่า ใน python 2 นั้น ไม่มีการเขียนส่วนนี้ แต่ผลที่ได้จากการ requests.post นั้นโค้ด: เลือกทั้งหมด
link_auth = 'http://' + ip + ':' + port + '/auth' response = requests.post(link_auth, headers=headers, json=data)
แต่พอเมื่อทำการทำงานบน python3 ซึ่งใช้โค้ดชุดเดียวกัน ต่างกันไลบารี่เพื่อให้ทำงานสอดคล้องกับเวอร์ชั่นของ pythonโค้ด: เลือกทั้งหมด
<Response [200]>
จึงสร้าง endpoint ให้เรียกใช้ครับ เพราะไล่โค้ดแล้วไม่มีส่วนไหนเขียนไว้เลยครับโค้ด: เลือกทั้งหมด
404 "error": "HTTP Request failed"
ไหนส่วนของ python2 นั้นที่สำเร็จยังหาสาเหตุไม่เจอ ว่าไปเรียกตรงไหนกันแน่ครับ - ครับได้ใช้ HTTPBasicAuth ของ requests ประกอบการใช้งานในการ ดึง password เพื่อยืนตัวตน
เพื่อยืนยันตัวตน
โค้ด: เลือกทั้งหมด
@auth.get_password def get_pw(username):
ซึ่งได้ใช้ทั้งสองเลยครับ