vue token登录注册闭环

注册 一

前台

get请求

<template>
  <div id="app">
    <h1>注册页面</h1>
    <input type="text" placeholder="用户名" v-model="input1"><br/>
     <input type="password" placeholder="密码" v-model="input2"><br/>
     <button @click="fun()">注册</button>
     <p v-if="bool">注册成功{{num}}秒后跳转到登录页面</p>
    <router-view/>
  </div>
</template>
<script>
import {getlink} from "@/api/getapi.js"
export default {
      data(){
        return{
            input1:"",
            input2:"",
            bool:false,
            num:3,
        }
      },
     methods:{
       fun(){
         getlink("api/demob/zhuce",{name:this.input1,age:this.input2}).then((ok)=>{
            console.log(ok.data.data.zhuceid)
             if(ok.data.data.zhuceid==1 && this.inputa!=="" && this.inputb!==""){
                    this.bool=true
                    setInterval(()=>{
                        this.num--;
                        if(this.num==0){
                            this.$router.push("/login")
                        }
                    },1000)
                }else{
                    alert("请输入账号或密码");
            }
         })
       }
     },
   
}
</script>

<style>

</style>

后台

//注意:后台注册地址已在中间件(index.js,可将多个接口连接再一起)
let express=require("express");
let db = require("../db/index.js")
let router=express.Router()

router.get("/zhuce",(req,res)=>{
    let userdata = new db({   
        name: req.query.name, //用户名
        age: req.query.age//密码
    })

    //后台将前台发送过来的数据存入数据库
    userdata.save().then((ok) => {
        console.log(ok)
        res.send({mag:"我是注册的接口",data:{zhuceid:1}})
    }).catch((err)=>{
        console.log(err)
        res.send({mag:"我是注册的接口",data:{zhuceid:0}})
    })
    //接收前台发过来的数据
    console.log(req.query.name+"-----"+req.query.age);
  
})

// 4.暴露
module.exports=router

登录 一

前台

post请求

<template>
  <div>
      <h1>欢迎来到登录页面</h1>
        <div class="clone">
           <input type="text" v-model="inputa" placeholder=" 用户名"/>
            <br>
           <input type="password" v-model="inputb" placeholder="  密码"/>
            <br>
          <button @click="fun()">点击登录</button>
        </div>
  </div>
</template>
<script>
import {postlink} from "@/api/postapi.js"
export default {
    data(){
      return {
          inputa:"",
          inputb:"",
       }
    },
    methods:{
      fun(){
         let usp=new URLSearchParams();
          usp.append("name",this.inputa);
          usp.append("age",this.inputb);
          postlink("api/demoa/denglu",usp).then((ok)=>{
            console.log(ok.data.data.dengluid)
              if(ok.data.data.dengluid==1){
                  //token
                  //在登录成功的时候把token存到本地存储(localstrong)
                  window.localStorage.setItem("token",ok.data.data.token)
                   this.$router.push("/home")
              }else{
                alert("账号或密码错误")
              }
          })
      }
    }
}
</script>

<style>

</style>

后台

let express=require("express");
let userdb=require("../db/index.js")
let router=express.Router();
let jwt=require("jsonwebtoken")


// 2.引用bodyparser
let bodyParser=require("body-parser")
// 3.开启解析功能
let bp=bodyParser.urlencoded({extended:false})
// 4.把解析功能传入
router.post("/denglu",bp,(req,res)=>{
   
    // 接收post数据
    // 1.下载body-parser的中间件   帮助express来解析post数据cnpm install --save body-parser
    console.log(req.body.name+"----"+req.body.age)
    //接受前台发过来的数据并在数据库查询
    userdb.find({name:req.body.name,pwd:req.body.pwd,}).then((ok)=>{
        console.log(ok)
        if(ok.length===0){
            res.send({mag:"我是登录的接口",data:{dengluid:0}})
        }else{
            // 登录的时候生成token
            // 生成语法:sign(你要加密的内容,密钥(自己随便定义,越乱越好))
            // 下载jsonwebtoken
            //引用jsonwebtoken
            //开始生成token token token
            let obj={
                loginid:1
            }

             let mi="asjoifjopiwejfpgoiejwpgoie"//生成密钥
             let token=jwt.sign(obj,mi)//生成token
             //把token给前台
             res.send({mag:"我是登录的接口",data:{dengluid:1,token}})
        }
    })
})

module.exports=router

退出登录

退出时删除token,与上面登录联用

<template>
  <div>
      首页首页首页首页首页首页首页首页
      <button @click="fun()">退出登录</button>
  </div>
</template>

<script>
export default {
    methods:{
      fun(){
        if(window.confirm("是否退出")){
            //退出的时候删除token
            window.localStorage.removeItem("token");
            this.$router.push("/login");
        }
    }
  }
}
</script>

<style>

</style>

登录状态的判断 前台

在路由中配合守卫进行,将接收到的token再返回给后台,后台接受之后进行解密,判断是否登录。

import Vue from 'vue'
import VueRouter from 'vue-router'
import {getlink} from "@/api/getapi.js"

Vue.use(VueRouter)

const routes = [
  {
    path: '/login',
    name: 'Login',
    component: () => import('../views/login.vue')
  },
  {
    path: '/clone',
    name: 'Clone',
    component: () => import('../views/clone.vue')
  },
  {
    path: '/home',
    name: 'Home',
    component: () => import('../views/home.vue')
  },
    // 重定向
    {
      path:"/",//当路径为空的时候
      redirect:"/clone"//把当前的路径切换成/shop(就是默认显示的页面)
    },
    // {
    //   path: '/*',//路径用星号,表示通配符选择器,所有的都能匹配到
    //   name: 'No',
    //   component: () => import( '../views/no.vue')//
    // },
    

]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})


router.beforeEach((to,from,next)=>{
  // 登录和注册页面需要判断是否登录过吗?
if(to.path=="/login"||to.path=="/clone"){
  next()
}else{
    // else就是不是登录和注册  我就需要判断用户是否登陆过没有
    // 1.得到token
    let token=window.localStorage.getItem("token")
    // 2.把得到的token发送给后台专门解密token的接口中
    getlink("/api/tokenb",{usertoken:token}).then((ok)=>{
      console.log(ok.data.dengluid)
      if(ok.data.dengluid==1){
        next()
      }else{
        alert("您没有登录!请您登录后访问")
        next("/login")
      }
    })
}

})


export default router

后台 接收前台返回的token,并且解密

// 解密token的测试接口
app.get("/tokenb",(req,res)=>{
    // let token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoi5oiR5pivdG9rZW7nmoRuYW1lIiwiYWdlIjoi5oiR5pivdG9rZW7nmoRhZ2UiLCJpYXQiOjE2Mjc5NTQ0ODN9.hoPiyNN2yTfmieEfCtyqZWzUpPOKzifHZc0f8OVcB6M"

    let token=req.query.usertoken//接受前台返回的token

    if(token==null){ 
         res.send({msg:"用户没有登陆过",dengluid:0}) 
    }
    // let mi="oasduixcviuywertpofasdoh"
    let mi="azxcoiusvdfiouywsedrfkhbj"

    jwt.verify(token,mi,(err,data)=>{
        console.log(err);//成功的时候返回null
        console.log(data);
        if(data.dengluid==1){
            res.send({msg:"用户登陆过",dengluid:1})
        }else{
            res.send({msg:"用户没有登陆过",dengluid:0})
        }
    
    })
 
})


app.listen(3000)

写完整后台详细步骤

1,建立一个serve的文件夹
下载 cnpm install --save express(用于搭建一个后台服务,写接口时要引用)
cnpm install --save mongoose (用于操作 mongdb数据库)
2,serve下建立一个db文件夹,里面一个index.js文件,用于存放数据库连接的代码。
3 serve下建立一个routers的文件夹,里面写多个.js接口文件,在它的同级建立一个index.js文件,用于将它里面的多个.js接口文件连接在一起,并且配置接口地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值