Javascript 验证用户登录

Javascript 验证用户登录,javascript,python,mysql,login,Javascript,Python,Mysql,Login,按下“登录”按钮后,它会将整个error.html文件打印到web控制台,而不是重定向到userhome.html,这一点出了问题,干杯!下面是所有代码 Python: @app.route('/ValidateLogin',methods=['POST']) def ValidateLogin(): try: _username = request.form['username'] _password = request.form['password']

按下“登录”按钮后,它会将整个error.html文件打印到web控制台,而不是重定向到userhome.html,这一点出了问题,干杯!下面是所有代码

Python:

@app.route('/ValidateLogin',methods=['POST'])
def ValidateLogin():
    try:
        _username = request.form['username']
        _password = request.form['password']

        #connection to MySQL
        cur = mysql.connection.cursor()
        cur.callproc('sp_validateLogin', (_username,))
        data = cur.fetchall()

        if len(data) > 0:
            if check_password_hash(str(data[0][3]), _password):
                session['user'] = data[0][0]
                return redirect('/UserHome')
            else:
                return render_template('error.html', error = 'Wrong Email Address or Password')
        else:
            return render_template('error.html', error = "Invalid Email Address or Password")

    except Exception as e:
        return render_template('error.html', error = str(e))
    finally:
        cur.close()
JS:


输入正确的用户凭据后,它将重定向到
/UserHome

您可以通过查看如下所示的请求日志来确认:

127.0.0.1 - - [28/Apr/2016 22:27:59] "POST /ValidateLogin HTTP/1.1" 302 - 127.0.0.1 - - [28/Apr/2016 22:27:59] "GET /UserHome HTTP/1.1" 200 - 127.0.0.1---[28/Apr/2016 22:27:59]“POST/ValidateLogin HTTP/1.1”302- 127.0.0.1---[28/Apr/2016 22:27:59]“GET/UserHome HTTP/1.1”200- 您可以看到,
$.ajax()
生成的对
/ValidateLogin
的POST请求被响应为302重定向到
/UserHome
,随后是
$.ajax()
。这是自动发生的,因此javascript没有机会对重定向进行操作

关于,一种解决方案是让服务器发送一个JSON响应,其中包括登录成功时要重定向到的“位置”URL。然后让您的
success()
处理程序使用
window.location.replace(location)
重定向浏览器


如果登录不成功,则从
error.HTML
模板呈现的HTML可能会以不同的JSON项返回,
success()
处理程序(因为您现在应该总是得到200个响应)使用该JSON项来设置文档内容。检查参考答案中的一些代码,这些代码显示如何在客户端处理它。

当输入正确的用户凭据时,它将重定向到
/UserHome

您可以通过查看如下所示的请求日志来确认:

127.0.0.1 - - [28/Apr/2016 22:27:59] "POST /ValidateLogin HTTP/1.1" 302 - 127.0.0.1 - - [28/Apr/2016 22:27:59] "GET /UserHome HTTP/1.1" 200 - 127.0.0.1---[28/Apr/2016 22:27:59]“POST/ValidateLogin HTTP/1.1”302- 127.0.0.1---[28/Apr/2016 22:27:59]“GET/UserHome HTTP/1.1”200- 您可以看到,
$.ajax()
生成的对
/ValidateLogin
的POST请求被响应为302重定向到
/UserHome
,随后是
$.ajax()
。这是自动发生的,因此javascript没有机会对重定向进行操作

关于,一种解决方案是让服务器发送一个JSON响应,其中包括登录成功时要重定向到的“位置”URL。然后让您的
success()
处理程序使用
window.location.replace(location)
重定向浏览器


如果登录不成功,则从
error.HTML
模板呈现的HTML可能会以不同的JSON项返回,
success()
处理程序(因为您现在应该总是得到200个响应)使用该JSON项来设置文档内容。查看参考答案,查看一些代码,说明如何在客户端处理该问题。

谢谢你的回答,但我找到了它不起作用的原因。密码被散列,然后变量大小太小,无法在数据库中保存散列后的密码,导致它始终显示错误页面@是吗?这不是你最初描述的问题,但我注意到你已经更新了你的问题。无论如何,您必须仍然遇到我上面描述的
$.ajax()
重定向问题-浏览器不会重定向到所需页面。你修改javascript来处理它了吗?谢谢你的回答,但我找到了它不工作的原因。密码被散列,然后变量大小太小,无法在数据库中保存散列后的密码,导致它始终显示错误页面@是吗?这不是你最初描述的问题,但我注意到你已经更新了你的问题。无论如何,您必须仍然遇到我上面描述的
$.ajax()
重定向问题-浏览器不会重定向到所需页面。您是否修改了javascript来处理它?