Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阻止用户直接访问url,如果未登录,则重定向到登录_Javascript_Python_Flask - Fatal编程技术网

Javascript 阻止用户直接访问url,如果未登录,则重定向到登录

Javascript 阻止用户直接访问url,如果未登录,则重定向到登录,javascript,python,flask,Javascript,Python,Flask,因此,我有一个flask应用程序,在主页中,我呈现了一个登录页面来登录。登录后,他们会得到一张要填写的表格。当他们稍后在表单提交过程中登录时,我也使用用户名值。 这是我的相关代码: @app.route('/', methods=['GET', 'POST']) def home(): return render_template('Login_new.html') @app.route('/login', methods=['POST']) def logger():

因此,我有一个flask应用程序,在主页中,我呈现了一个登录页面来登录。登录后,他们会得到一张要填写的表格。当他们稍后在表单提交过程中登录时,我也使用用户名值。 这是我的相关代码:

@app.route('/', methods=['GET', 'POST'])
def home():
    return render_template('Login_new.html')
    
@app.route('/login', methods=['POST'])
def logger():
    if request.method == 'POST':
        global user
        user = request.form['username']
        passwrd = request.form['password']

        if (user=="admin") and (passwrd=="VendorAdmin2021"):
            return redirect(url_for("admin.index"))
        
        url = "api for authentication"
        response = requests.post(url, json={"username": user,"password": passwrd}, verify=False)
        #data = response.json()
        print(response.status_code)
        
        if response.status_code == 200:
            return redirect(url_for("test"))
        else:
            flash('Wrong')
            return render_template('Login_new.html')
测试url包含实际的表单。以下是Login_new.html文件:

<html>

<head>
  <link rel="stylesheet" href="/static/style2.css">
  
  <title>Sign in</title>
</head>

<body>
  <div class="main">
    <p class="sign" align="center">Novartis</p>
    <form class="form1" action="/login" method="POST" id="myForm">
      <input class="un " type="text" align="center" placeholder="5-2-1 id" name="username">
      <input class="pass" type="password" align="center" placeholder="Password" name="password">
      <input type="submit" value="Log in" class="submit">
         
                
    </div>

<script src="https://cdn.jsdelivr.net/npm/sweetalert2@10.12.5/dist/sweetalert2.all.min.js"></script>

{% with messages = get_flashed_messages() %}
    {% if messages %}
    <script>
      var messages = {{ messages | safe }};
      if (messages=="Wrong"){
          swal.fire({
            title:"Invalid id or password!",
            text:"Please make sure you are connected to the Company Intranet",
            icon:"error",
            closeOnConfirm: false
            });
      }
    </script>
  {% endif %}
{% endwith %}

</body>

</html>
在测试url中:

@app.route('/test')
def test():
    if not session.get('logged_in'):
        return render_template('Login_new.html')
    form = vendorForm()
现在我得到一个错误,会话没有属性get。
请帮帮我,我在这个问题上被困太久了

你可以像在flask登录模块中一样使用自己的自定义装饰器。 类似这样的东西,

def login_required(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if session.get('username') is None or session.get('if_logged') is None:
            return redirect('/login',code=302)
        return f(*args, **kwargs)
    return decorated_function
然后在需要登录的路由中这样使用

@app.route('/', methods=['GET', 'POST'])
@login_required
def home():
   #blah_blah
这样做的目的是,无论何时调用url“/”,它都会调用login_required()包装中的装饰函数()。因此,将您的登录逻辑放在decorrated_函数()中。检查用户是否使用sesion cookie(或任何您想要的方法)登录,如果未登录,则重定向到login,否则不返回任何内容


关于session.get()错误,您是否从模块flask导入了会话?语法似乎正确

您可以像在flask登录模块中一样使用自己的自定义装饰器。 类似这样的东西,

def login_required(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if session.get('username') is None or session.get('if_logged') is None:
            return redirect('/login',code=302)
        return f(*args, **kwargs)
    return decorated_function
然后在需要登录的路由中这样使用

@app.route('/', methods=['GET', 'POST'])
@login_required
def home():
   #blah_blah
这样做的目的是,无论何时调用url“/”,它都会调用login_required()包装中的装饰函数()。因此,将您的登录逻辑放在decorrated_函数()中。检查用户是否使用sesion cookie(或任何您想要的方法)登录,如果未登录,则重定向到login,否则不返回任何内容


关于session.get()错误,您是否从模块flask导入了会话?语法似乎正确

这个问题在登录的Mega教程部分有详细介绍。-我已经看过了。它使用flask登录,该登录使用SQL数据库中的用户模型进行身份验证。我的应用程序使用api url进行验证,而不是直接从数据库进行验证。这就是为什么我无法在我的应用程序中实现该解决方案示例显示flask_登录与数据库一起使用,但这不是必需的。您是否尝试过使用会话?您需要重构登录路由中的代码,将其添加到装饰器,并将装饰器添加到任何要进行身份验证的路由中。有关登录的Mega教程部分详细介绍了此问题。-我已经看过了。它使用flask登录,该登录使用SQL数据库中的用户模型进行身份验证。我的应用程序使用api url进行验证,而不是直接从数据库进行验证。这就是为什么我无法在我的应用程序中实现该解决方案的原因示例显示,flask_登录正在与数据库一起使用,但这不是必需的。您是否尝试使用会话?您需要重构登录路径中的代码,将其添加到装饰器,并将装饰器添加到任何要进行身份验证的路径中。