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

yizhihongxing

下面是“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日

相关文章

  • 详解python执行shell脚本创建用户及相关操作

    下面我将详细讲解如何使用Python执行Shell脚本并创建用户及相关操作,并提供两个示例作为说明。 进行前的准备工作 在开始之前,我们需要确认Python和Shell都已经安装好并且可用。同时,我们需要明确本次操作需要使用到的Python模块和Shell命令。具体的准备工作如下: Python模块 本次操作需要使用到的Python模块有: os: 用于执行…

    Flask 2023年5月15日
    00
  • 如何使用Cython对python代码进行加密

    使用Cython对Python代码进行加密,通常是通过将Python代码编译为Cython模块,该模块可以加密并保护您的Python代码。下面我们来一步步了解如何使用Cython对Python代码进行加密。 第一步: 安装Cython 在开始使用Cython编译Python代码之前,您需要先安装Cython。您可以使用pip来安装Cython,可以在命令行界…

    Flask 2023年5月16日
    00
  • Flask框架学习笔记之表单基础介绍与表单提交方式

    Flask是Python语言中一个非常流行的轻量级Web应用框架,适合搭建小型项目或者功能简单的应用,下面是关于Flask表单基础的介绍和表单提交方式的攻略。 一、表单基础介绍 Web应用中表单是一种常见的接口元素。表单允许用户通过交互式方式输入信息并向服务器提交数据。在Flask中,可以使用Flask-WTF插件来构建和处理表单。 首先需要安装Flask-…

    Flask 2023年5月16日
    00
  • 在Python的Flask框架中验证注册用户的Email的方法

    在Python Flask框架中,验证注册用户的Email是非常重要的一步,这有助于确保用户提交的Email是真实有效的。以下是完成此过程的完整攻略: 1. 为注册页面添加表单 在Flask应用中,需要为注册页面添加表单。在表单中,需要添加一个邮箱输入框,以及提交和取消按钮。示例: <form method="POST" actio…

    Flask 2023年5月16日
    00
  • Flask接收上传图片方法实现

    下面是Flask接收上传图片的完整攻略。 准备工作 首先,我们需要先安装Flask的插件Flask-Uploads,可以通过pip直接安装,命令如下: pip install Flask-Uploads 安装完成后,在Flask的应用中引入该插件: from flask_uploads import UploadSet, configure_uploads,…

    Flask 2023年5月16日
    00
  • Docker构建python Flask+ nginx+uwsgi容器

    接下来是详细讲解“Docker构建python Flask + nginx + uwsgi容器”的完整攻略。首先要说明的是,本篇攻略假定您已经掌握Docker的基本知识,如何安装和运行Docker,因此本文重点是如何使用Docker构建Python Flask + nginx + uwsgi容器。 步骤一:创建项目 首先,我们需要在计算机上创建一个项目文件夹…

    Flask 2023年5月16日
    00
  • Vue和Flask通信的实现

    下面是“Vue和Flask通信的实现”的完整攻略: 1. 前言 Vue是前端框架,Flask是后端框架,在面对复杂的前后端交互时,Vue和Flask的相互通信尤为重要。本攻略将介绍如何使用Vue和Flask进行通信,并提供两个示例说明。 2. 基本步骤 Vue和Flask通信的基本步骤如下: 在Flask中定义路由和接口 在Vue中调用Flask接口 在Vu…

    Flask 2023年5月15日
    00
  • 如何运用docker配合python开发环境实例

    很高兴为你介绍使用 Docker 配合 Python 开发环境的实例攻略。这里将会包含两个示例说明。 示例一:使用 Docker 配合 Python 开发环境 步骤一:安装 Docker 使用 Docker 前,需要在本地安装 Docker 软件,可以在 Docker 官网下载合适的版本进行安装。 步骤二:构建 Docker 镜像 进入项目的根目录,在该目录…

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