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日

相关文章

  • python flask实现分页的示例代码

    接下来我将为您详细讲解如何使用 Python Flask 实现分页功能的示例代码攻略。 1. 实现分页功能 – 示例1 第一步,安装 Flask 和 Flask-Pagination: pip install Flask pip install Flask-Pagination 第二步,引入 Flask 和 Flask-Pagination: from fl…

    Flask 2023年5月15日
    00
  • flask框架渲染Jinja模板与传入模板变量操作详解

    下面我将为你详细讲解“flask框架渲染Jinja模板与传入模板变量操作详解”的完整攻略。 什么是Jinja模板 Jinja是Flask框架默认的模板引擎,它基于Python的模板引擎,并且使用的语法类似于Django模板引擎。 在Flask中,你可以使用Jinja将Python变量传递到模板中进行渲染,然后将渲染后的模板返回给用户的浏览器。 如何渲染Jin…

    Flask 2023年5月16日
    00
  • Python Type Hints 学习之从入门到实践

    下面是详细讲解“Python Type Hints 学习之从入门到实践”的完整攻略: Python Type Hints 学习之从入门到实践 什么是 Python Type Hints Python 从 3.5 版本开始引入了 Type Hints 的概念,它是一种用于标注函数、变量、类等对象类型的注释。Python 并不会在运行时对其进行强制校验,但是可以…

    Flask 2023年5月16日
    00
  • Flask 变量规则详解

    Flask 是一个轻量级的 Web 框架,其变量规则功能允许开发者创建动态 URL。这篇文章将介绍 Flask 变量规则的详细信息,帮助开发者理解如何使用 Flask 创建动态 URL。本文将涉及以下主题: 什么是变量规则? 如何使用变量规则创建动态 URL? 给变量规则添加限制条件 什么是变量规则? 在 Flask 中,变量规则指的是将 URL 中的部分作…

    Flask 2023年3月13日
    00
  • docker-compose统一管理多个容器使用详解

    Docker-Compose 统一管理多个容器使用详解 Docker-Compose 是 Docker 官方提供的管理多个容器的工具。通过一个配置文件可以管理、启动和停止多个容器,非常方便。 本文将详细讲解 Docker-Compose 的使用方法和相关配置。同时,提供两个实例演示来说明如何使用 Docker-Compose。 Docker-Compose …

    Flask 2023年5月16日
    00
  • 用Python Flask创建简洁高效的URL短链接服务

    创建高效的URL短链接服务是一个非常流行的任务,它可以使网站更加用户友好并提高 SEO。在本文中,我将介绍如何使用Python Flask框架快速创建一个简洁高效的URL短链接服务。 步骤1:安装Flask Flask 可以通过pip包管理器安装。在执行下面的命令之前,请确保已经安装了pip: pip install Flask 步骤2:创建Flask应用程…

    Flask 2023年5月16日
    00
  • 新一代Python包管理工具

    这篇文章将为大家介绍新一代Python包管理工具——poetry的完整攻略,主要包括以下内容: 什么是poetry 安装poetry 使用poetry新建Python项目 使用poetry安装项目依赖包 使用poetry打包和发布项目 什么是poetry poetry是一款新一代Python包管理工具,它提供了以下功能: 定义项目的依赖关系 管理项目的虚拟环…

    Flask 2023年5月16日
    00
  • Ubuntu下Python+Flask分分钟搭建自己的服务器教程

    下面是 “Ubuntu下Python+Flask分分钟搭建自己的服务器教程” 的完整攻略。 1. 安装Python和Flask库 在 Ubuntu 系统中,Python 已经默认预装。我们只需要安装 Flask 库即可。 sudo apt-get update sudo apt-get install python-pip sudo pip install …

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