Estoy usando FLASK + Ajax para crear una página de inicio de sesión. Debería redirigir a otra página en caso de que el nombre de usuario y la contraseña sean correctos.
Hice un formulario. y la solicitud está pasando con éxito. y puedo capturar los datos en python (frasco). pero mi problema es que no se produce ningún redireccionamiento después de renderizar la página. con render_template
Aquí está para redirigir a la página de inicio de sesión al solicitar la URL raíz
@app.route('/') def OperationPage(): log_screenprint('User Has Requested / URL >> Redirect to /login') return redirect(url_for('page_login'))Y esta es la función que verifica el nombre de usuario y la contraseña. entonces debería redirigir a la página siguiente
@app.route('/login' , methods=["POST","GET"]) def page_login() : log_screenprint('Got Request From GUI User to login With Cred.') for key,value in securityFile.items() : dbUser = securityFile[key]['username'] dbpass = securityFile[key]['defaultpass'] username = request.form.get('username') password = request.form.get('password') sessionId = request.form.get('session') if dbUser == username : if dbpass == password : socketio.emit('userDb' , json.dumps(securityFile[key]) , session = sessionId) return render_template('/index.html' , title= 'Home Page') return render_template('/login.html')y esta es la solicitud que estoy usando en javascript.
$('#login-form').submit(function (e) { e.preventDefault(); var username = document.querySelector('.login-username').value var password = document.querySelector('.login-password').value $.ajax({ url: '/login', data: { username: username, password: password, session : (socket.id), }, type: 'POST', success: function (response) { console.log('response'); }, error: function (error) { console.log(error); } }); });El tema vuelve a ser eso. incluso el nombre de usuario y la contraseña correctos. el index.html no se está representando
Mientras usa ajax, está a cargo de qué hacer con la respuesta del servidor. La respuesta devuelta por el servidor es una página web html (index.html) que debe mostrar al usuario. En su caso, solo está imprimiendo la palabra 'respuesta' en la consola de la página web:
success: function (response) { console.log('response'); },Sugiero hacerlo de otra manera. Yo crearía otra ruta:
@app.route('/index') def index(): return render_template('/index.html' , title= 'Home Page')y redirigió al usuario cuando la respuesta del servidor fuera exitosa.
success: function (response) { window.location.replace('index') },También necesita algunos cambios para la función de autenticación, ya que su servidor devuelve un código http exitoso cada vez. Puedes usar algo como:
return "", 200para un inicio de sesión exitoso, y
return "", 401por fallido.