저는 작업중인 개인 프로젝트에 대해 백스텝과 jQuery로 Flask를 사용하고 있습니다. 내가 그들의 이름 또는 암호 내/로그인 경로는 다음과 같습니다 백엔드에Flask 및 jQuery를 사용하여 리디렉션하는 방법
등 잘못된 사용자에게 것 errorFuction에서
$.ajax({
type: "POST",
data: JSON.stringify(body), //username and password
contentType: 'application/json; charset=utf-8',
url: "/login",
success: successFunction,
error: errorFunction,
complete: completeFunction
});
:
것은 내가이 작업을 수행 할 수 로그인
@app.route("/login", methods=['GET', 'POST'])
def login():
if(request.method == "POST"):
#retrieve the username and password sent
data = request.json
if(data is None or not 'username' in data or not 'password' in data):
abort(400)
else:
count = User.query.filter(User.username == data['username']).count()
if(count == 0):
abort(404) #that user doesnt exist
else:
passIsCorrect = User.query.filter(User.username == data['username'],
User.password == data['password']).count()
if(passIsCorrect):
session['user'] = data['username']
return redirect(url_for('index'))
else:
abort(401)
else:
return render_template('login.html')
그러나 클라이언트 측 브라우저 리디렉션하지 않고 내가 완성 기능에서 응답 객체에서 보면 나는 보통에서 반환 될 것을보고 내 '/'경로 : 200 OK 및 index.html 템플릿.
내 질문은 : 나는 클라이언트 리디렉션하게 가로 챌 수있는 몇 가지 방법은
있습니까?
jquery가 브라우저가 아닌 요청을 시작하기 때문에 문제가 있다고 가정합니다.
이 문제를 해결하기위한 첫 번째 시도는 make_response
을 사용하여 직접 응답을 구성하고 Location 헤더를 설정하는 것이었지만 동일한 결과가 발생했습니다. 현재 솔루션은 200을 반환하고 클라이언트는 window.location = "/"
을 처리하지만 이는 해킹 된 것처럼 보입니다.
일반 양식의 동작을 복제하려면 왜 AJAX를 사용하고 있습니까? 또한 일반 텍스트 암호는 저장하지 마십시오. 해쉬. – Blender
이 작업을 위해 [Flask-Login] (https://github.com/maxcountryman/flask-login)을보고 싶을 수도 있습니다. 아마도 대부분의 자체 구축 인증 시스템보다 더 안전 할 것입니다. –
@Blender 결국 https를 넘을 것입니다. – bio595