首页 > 其他分享 >Flask+Vue 用户登录

Flask+Vue 用户登录

时间:2022-12-26 15:45:35浏览次数:60  
标签:__ Vue return 登录 Flask py admin token import

后端开发环境

Flask              2.2.2
Flask-Cors         3.0.10
Flask-HTTPAuth     4.5.0
Flask-RESTful      0.3.9
itsdangerous       2.0.1

代码目录结构

D:.
│
├─utils
│  │  token_auth.py
│  └─__init__.py
│
├─views
│  │  login.py
│  │  upload.py
│  └─__init__.py
│
│   app.py
└─  config.py

后端代码

1、自定义认证token的方法

文件位置: utils/token_auth.py

from flask_httpauth import HTTPTokenAuth
from itsdangerous import TimedJSONWebSignatureSerializer
from config import secret_key

# 用于生成token
s = TimedJSONWebSignatureSerializer(secret_key,expires_in=28800)
auth = HTTPTokenAuth()

# 认证客户端传递过来的token是否正确,前端请求中的headers中需要添加'Authorization'
@auth.verify_token
def verify_token(token):
    try:
        data = s.loads(token)
    except Exception as e:
        print("【login】认证异常",e,flush=True)
        return False
    return True

@auth.error_handler
def unauthorized():
    return {"code": 50000, "data": f"403:认证异常,请重新登录!"}, 200
2、登录接口

views/login.py

from flask import Blueprint
from flask_restful import reqparse, Resource, Api
from config import admin_passwd, secret_key
from utils.token_auth import auth
from itsdangerous import TimedJSONWebSignatureSerializer

s = TimedJSONWebSignatureSerializer(secret_key,expires_in=28800)

blueprint = Blueprint('login',__name__)
api = Api(blueprint)

parser = reqparse.RequestParser()
parser.add_argument('username',type=str)
parser.add_argument('password',type=str)

class User(Resource):
    @auth.login_required
    def get(self, user_opt):
        if user_opt == 'info':
            return {
                    "code": 20000,
                    "data": {"roles": ["admin"],"name": "admin","avatar": "/sl.png"}}
    #  生成token
    def post(self, user_opt):
        if user_opt == 'login':
            args = parser.parse_args()
            username = args.get('username')
            password = args.get('password')
            if password == admin_passwd and username == "admin":
                // 通过s.dumps(admin_passwd)来生成token
                token = str(s.dumps(admin_passwd),encoding="utf-8")
                return {"code": 20000,"data": {"token": "Bearer {}".format(token)}}
            else:
                return {"code": 40000, "data": "密码错误!"}
        elif user_opt == 'logout':
            return {"code": 20000,"data": "success"}

api.add_resource(User, '/api/user/<user_opt>')
3、启动文件内容

app.py

from flask import Flask
from flask_restful import Api
from flask_cors import CORS

from views import upload,login

app = Flask(__name__)

cors = CORS(app, resources={r"/api/*": {"origins": "*"}})

app.register_blueprint(upload.blueprint)
app.register_blueprint(login.blueprint)
 

  
if __name__ == '__main__':
    app.run(host = '0.0.0.0', debug=True)
配置文件

config.py

import os
# 设置默认的key值
secret_key = os.environ.get('secret_key','0a79caed-8a45-49b9-97a6-86e50e12b234')
# 设置默认的登录密码
admin_passwd = os.environ.get('admin_passwd','123456')

前端部分

前端直接用的开源的vue-admin-template
github仓库地址: https://github.com/PanJiaChen/vue-admin-template

src/api/user.js
这一部分是用于控制用户登录以及退出的接口

import request from '@/utils/request'

export function login(data) {
  return request({
    url: '/api/user/login',
    method: 'post',
    data
  })
}

export function getInfo(token) {
  return request({
    url: '/api/user/info',
    method: 'get',
    params: { token }
  })
}

export function logout() {
  return request({
    url: '/api/user/logout',
    method: 'post'
  })
}

src/utils/request.js
需要将请求头的字段改成Authorization,与后端认证相关请求头匹配

前后端整体编译以及部署

目录结构

项目所有代码
https://gitee.com/scc205/sdam.git

标签:__,Vue,return,登录,Flask,py,admin,token,import
From: https://www.cnblogs.com/shangcc205/p/16877770.html

相关文章

  • el-radio-group初始化默认值后点击无法切换问题/vue中设置表单对象属性页面不同步问题
     <el-radio-groupv-model="ruleForm.type"><el-radio:label="1">方案一</el-radio><el-radio:label="2">方案二</el-radio></el-radio-group>原初始......
  • 快速创建Vue项目
    step1:初始化项目vueinitwebpackteststep2:安装[email protected]注意:需要进入项目目录;安装router的版本......
  • [Vue Router warn]: No match found for location with path
    vue-router.mjs:35[VueRouterwarn]:Nomatchfoundforlocationwithpath""[VueRouterwarn]:uncaughterrorduringroutenavigation:原来用route.push报......
  • vue的三种渲染定义方式
    title:vue的三种渲染定义方式description:'vue的三种渲染定义方式:template,render,app.mount()'tags:-vuedate:2022-11-2020:10目录vue的三种渲染定义方......
  • Vue 禁止滚动
    比如我们想做一个校验,会出现一个弹窗,填写校验信息,此时页面禁止滚动可以绑定如下事件change(){//show控制弹窗显隐this.show=!this.showif(this.show......
  • vue封装通用组件
    使用Vue.component可以用来注册全局组件//main.js...importSchoolfrom"./components/School.vue"Vue.component("test123",School)...//.vue<template>......
  • python之路56 csrf跨站请求 auth模块登录注册方法
    csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在该网站上做操作但是操作的结果会影响到用户正常的网站账户但是其中有一些猫腻eg:英语四六级考试需要网上先......
  • 安全单点登录(SSO)解决方案
    随着企业大量采用云应用程序,最终用户不得不在一天中处理越来越多的密码,只是为了完成他们的工作。为了进行有效的用户身份管理,您需要采用一种有效且安全的方法来管理用户;密......
  • 【AGC】集成付费下载服务sdk登录闪退
    问题背景:cp反馈集成付费下载sdk在正常登录时,出现登录闪退的报错,出现故障的手机型号操作系统版本是Android9,集成的付费下载的版本号是drm_v2.5.2.300。部分报错信息:​解决方......
  • Vue路由
    VueRouter一、对前端路由的理解路由:路由是url到函数的映射,可以根据不同的url地址展示不同的内容或页面。服务器端路由(后端路由)对于服务器来说,当接收到客户端发......