Vue+Flask实现简单的登录验证跳转的示例代码

下面是“Vue+Flask实现简单的登录验证跳转的示例代码”的完整攻略,包含两个示例说明。

示例一

前端部分(Vue)

在前端部分,我们需要使用 axios 进行登录请求。登录成功后我们将会在 cookie 中存储 token,以便随后的访问都可以带上该 token。

<template>
  <form>
    <input v-model="username" type="text" placeholder="username" />
    <input v-model="password" type="password" placeholder="password" />
    <button @click.prevent="login">login</button>
  </form>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      username: '',
      password: '',
    };
  },
  methods: {
    async login() {
      const response = await axios.post('/api/login', {
        username: this.username,
        password: this.password,
      });
      if (response.data.success) {
        document.cookie = `token=${response.data.token}`;
        window.location.href = '/home';
      } else {
        alert(response.data.message);
      }
    },
  },
};
</script>

后端部分(Flask)

在后端部分,我们先实现一个简单的登录验证逻辑,在成功验证后会返回一个 token。

from flask import Flask, jsonify, request
import jwt

app = Flask(__name__)

@app.route('/api/login', methods=['POST'])
def login():
    username = request.form.get('username')
    password = request.form.get('password')
    if username == 'admin' and password == '123456':
        token = jwt.encode({'username': username}, 'secret', 'HS256')
        return jsonify({'success': True, 'token': token.decode('ascii')})
    else:
        return jsonify({'success': False, 'message': 'invalid credentials'})

接着我们需要在所有需要登录才能访问的 API 都进行 token 验证。在这个示例中我们假设 /api/home 即为需要登录才能访问的 API。

@app.route('/api/home')
def home():
    token = request.cookies.get('token')
    if not token:
        return jsonify({'success': False, 'message': 'missing token'}), 401
    try:
        jwt.decode(token, 'secret', algorithms=['HS256'])
    except jwt.exceptions.DecodeError:
        return jsonify({'success': False, 'message': 'invalid token'}), 401
    return jsonify({'success': True, 'message': 'welcome home'})

通过这样的代码实现,我们就可以实现基本的登录验证跳转了。

示例二

前端部分(Vue)

在前端部分,我们实现一个带有 token 的请求,通过验证 token 来决定是否允许请求 API。

<template>
  <form>
    <input v-model="username" type="text" placeholder="username" />
    <input v-model="password" type="password" placeholder="password" />
    <button @click.prevent="login">login</button>
    <button @click.prevent="showSecret">show secret</button>
  </form>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      username: '',
      password: '',
    };
  },
  methods: {
    async login() {
      const response = await axios.post('/api/login', {
        username: this.username,
        password: this.password,
      });
      if (response.data.success) {
        document.cookie = `token=${response.data.token}`;
        alert('login success');
      } else {
        alert(response.data.message);
      }
    },
    async showSecret() {
      const token = document.cookie.replace(/token=/, '');
      try {
        const response = await axios.get('/api/secret', {
          headers: {
            Authorization: `Bearer ${token}`,
          },
        });
        alert(response.data.message);
      } catch (error) {
        alert(error.response.data.message);
      }
    },
  },
};
</script>

后端部分(Flask)

在后端部分,我们实现前端所使用的 API。首先是登录验证逻辑,和示例一中的逻辑相同。

from flask import Flask, jsonify, request
import jwt

app = Flask(__name__)

@app.route('/api/login', methods=['POST'])
def login():
    username = request.form.get('username')
    password = request.form.get('password')
    if username == 'admin' and password == '123456':
        token = jwt.encode({'username': username}, 'secret', 'HS256')
        return jsonify({'success': True, 'token': token.decode('ascii')})
    else:
        return jsonify({'success': False, 'message': 'invalid credentials'})

接下来是需要登录才能访问的 API,通过验证 token 可以决定是否允许访问。

from flask import Flask, jsonify, request
import jwt

app = Flask(__name__)

@app.route('/api/secret')
def secret():
    token = request.headers.get('Authorization', '').replace('Bearer ', '')
    if not token:
        return jsonify({'success': False, 'message': 'missing token'}), 401
    try:
        jwt.decode(token, 'secret', algorithms=['HS256'])
    except jwt.exceptions.DecodeError:
        return jsonify({'success': False, 'message': 'invalid token'}), 401
    return jsonify({'success': True, 'message': 'you found the secret'})

通过这样的代码实现,我们同样可以实现基本的登录验证跳转。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue+Flask实现简单的登录验证跳转的示例代码 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 使用apidoc管理RESTful风格Flask项目接口文档方法

    使用apidoc管理RESTful风格Flask项目接口文档的步骤如下: 一、安装APIDoc APIDoc是一个用于生成文档的工具,可以通过npm安装: npm install apidoc -g 二、在项目中添加Apidoc注释 在代码中添加注释,以便APIDoc能够识别、解析并自动生成API文档。以Flask为例,注释标识符是”””,示例代码如下: @…

    Flask 2023年5月15日
    00
  • 在Python的Flask框架下收发电子邮件的教程

    在Python的Flask框架下收发电子邮件需要使用到Python标准库中的smtplib和email模块。 安装Flask-Mail 在开始之前,需要先安装Flask-Mail。 可以在终端中使用以下命令进行安装: pip install Flask-Mail 或者在服务器/虚拟环境中使用以下命令进行安装: sudo pip install Flask-M…

    Flask 2023年5月16日
    00
  • python中使用PIL制作并验证图片验证码

    Python中使用PIL(Python Imaging Library)制作并验证图片验证码可以用于验证用户的身份,增加系统的安全性。本文将详细讲解制作并验证图片验证码的完整攻略,包括以下内容: 安装PIL库 制作图片验证码 校验图片验证码 1. 安装PIL库 在Python中使用PIL库需要先安装PIL库。可以使用pip命令进行安装: pip instal…

    Flask 2023年5月16日
    00
  • 利用nginx解决跨域问题的方法(以flask为例)

    当我们使用 Flask 构建 API 并通过 AJAX 请求进行数据传递的时候,容易遇到跨域问题,这时候可以使用 Nginx 转发解决跨域问题。 方法一 下面是一个简单的 Nginx 配置,将 Flask 提供的 API 接口转发到本地 5000 端口,即可解决跨域问题。 首先安装并启动 Nginx,然后创建一个名为 myapp.conf 的 Nginx 配…

    Flask 2023年5月16日
    00
  • Flask如何获取用户的ip,查询用户的登录次数,并且封ip

    下面我会分步骤详细讲解Flask如何获取用户的IP地址,查询用户的登录次数,并封锁IP的完整攻略,包含两条示例说明。 获取用户IP地址 Flask可以使用request对象获取用户的IP地址。具体步骤如下: 引入request模块:在Flask应用程序中,需要使用request模块来获取用户请求的相关信息。 python from flask import …

    Flask 2023年5月16日
    00
  • python3 flask实现文件上传功能

    下面我将为你详细讲解“Python3 Flask 实现文件上传功能”的完整攻略。 1. 确定上传文件的保存路径 在 Flask 中,我们可以通过设置 app.config 来确定上传文件的保存路径。一般来说,我们建议将上传文件保存在外部的文件夹中,而不要与 Flask 应用程序的代码混淆。 下面是一个设置上传文件保存路径的代码示例: import os fr…

    Flask 2023年5月15日
    00
  • Flaks基础之在URL中添加变量的实现详解

    下面我将详细讲解“Flask基础之在URL中添加变量的实现详解”的攻略,主要包括以下内容: 1. 如何在Flask中添加URL变量 在Flask中,我们可以在URL中通过添加变量来动态地生成不同的URL。具体实现方式是将需要带入变量的部分用尖括号(<>)包含起来,例如: @app.route(‘/user/<username>’) d…

    Flask 2023年5月16日
    00
  • 零基础怎样才能系统快速的学会Python

    针对“零基础怎样才能系统快速的学会Python”的问题,我可以给出以下完整攻略: 一、学习准备 在学习Python之前,需要先了解一些基本的编程概念和计算机基础知识: 编程语言的基础语法和常用数据类型; 算法和数据结构的基础知识; 计算机组成原理和操作系统基础知识; 使用代码编辑器和终端工具的基本操作。 二、学习步骤 1. 选择入门教程和学习资源 选择适合自…

    Flask 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部