登录时验证的token,和导航栏的显示和隐藏

第一步发登录的请求,存储到当地

 async login() {
      let data = {
        username: this.loginForm.username,
        password: this.loginForm.password,
      }
      // console.log(data);
      let res = await this.$api.useLogin(data)
      console.log(res);
      if (res.status == 200) {
        this.islogout = false
        localStorage.setItem('username', this.loginForm.username);
        localStorage.setItem('password', this.loginForm.password);
        localStorage.setItem('token', res.data.token)
        console.log(res.data.token);
        this.token = res.data.token
        console.log(this.token);
        this.$message.success(this.loginForm.username + '登陆成功');
        if (this.loginForm.username === 'admin') {
          this.isLogin = true
        this.$emit('formlogin', this.isLogin)
        } else {
          this.isLogin = false
        this.$emit('formlogin', this.isLogin)
        }
        // localStorage.setItem('islogin', false);
        // this.$emit('formlogin', this.isLogin)
        // this.$emit('formlogins', this.isLogin)
      } else {
        if (this.loginForm.username == '' && this.loginForm.password == '') {
          this.$message.error('账号或密码为空')
        } else {
          this.$message.error('账号或密码错误')
        }
      }
    },

退出的时候清除当地的缓存

loginout() {
      localStorage.removeItem('token')
      localStorage.removeItem('username')
      localStorage.removeItem('password')
      localStorage.removeItem('islogin');
      this.loginForm = {
        username: '',
        password: ''
      }
      this.islogout = !this.islogout
      this.isLogin = false
      this.$emit('formlogin', this.isLogin)
      // console.log(this.isLogin);
    },

验证当前是否有token在created里面用一下,this.existtoken()

   // 与后端判断是否存在token
    async existtoken() {
      try {
        const token = localStorage.getItem('token')
        let data = {
          token: this.token
        }
        // console.log(data);
        let res = await this.$api.usertoken(data)
        // console.log(res);
        if (res.code == 200) {
          this.islogout = false
          if(this.loginForm.username === 'admin') {
          this.isLogin = true
          }else{
          this.isLogin = false
          }
          this.$emit('formlogin', this.isLogin)
        } else {
          if (res.code == 403) {
            this.loginout()
          } else {
            this.islogout = true
            this.isLogin = false
            this.$emit('formlogin', this.isLogin)
          }
        }
      } catch (error) {
        console.error(error)
        this.islogout = true
      }


    }
  },
  created() {
    // 与后端判断是否存在token
    this.existtoken()
    // 从当地的拿取数据
    // console.log(this.isLogin);
    let storedUsername = localStorage.getItem('username');
    if (storedUsername) {
      this.loginForm.username = storedUsername;
    }
    // if (islogin === 'false') {
    //   this.isLogin = false;
    // }
  }

完整代码

<template>
  <!-- 登入 -->
  <div>
    <div v-if="islogout">
      <div>
        <span
          style="width:60px; height: 25px; font-size: 12px; margin-left: 50%; line-height: 25px;  display: inline-block; color: #42a1a1;">用户名:</span>
        <input type="text" placeholder="用户名" v-model="loginForm.username"
          style="background-color: transparent; color: #42a1a1; border: 1px solid #b1b1ab;">
      </div>
      <div>
        <span
          style="width:60px; height: 25px; margin-left: 50%;  font-size: 12px; display: inline-block; color: #42a1a1;">密码
          &nbsp;&nbsp;:</span>
        <input type="text" placeholder="密码" v-model="loginForm.password"
          style="background-color: transparent; color: #42a1a1; border: 1px solid #b1b1ab;">
      </div>
      <div style="display: inline-block; position: absolute; top: 10px; right: 8%;">
        <a href="#" style="color: #42a1a1; font-size: 15px;" @click="register">立即注册</a><br>
        <button @click="login"
          style="text-align: center; font-size: 15px; width:70px ;margin-top: 2px; border: 1px solid #b1b1ab; color: #42a1a1; ">登入</button>
      </div>
    </div>
    <div v-if="!islogout">
      <div style="display: inline-block; position: absolute;  color: #42a1a1;right: 300px;top: 30px;">
        <span>用户名:{{ loginForm.username }}</span>
      </div>
      <div style="margin-left: 80%; display: inline-block; margin-top: 20px; color: #42a1a1; font-size: 15px;"
        @click="loginout">退出</div>
    </div>
  </div>
</template>
<script>
export default {

  data() {
    return {
      loginForm: {
        username: '',
        password: '',
      },
      isLogin: false,
      // 登入框的显示与隐藏
      islogout: false,
      token: '',
    }
  },
  methods: {
    // 登录
    async login() {
      let data = {
        username: this.loginForm.username,
        password: this.loginForm.password,
      }
      // console.log(data);
      let res = await this.$api.useLogin(data)
      console.log(res);
      if (res.status == 200) {
        this.islogout = false
        localStorage.setItem('username', this.loginForm.username);
        localStorage.setItem('password', this.loginForm.password);
        localStorage.setItem('token', res.data.token)
        console.log(res.data.token);
        this.token = res.data.token
        console.log(this.token);
        this.$message.success(this.loginForm.username + '登陆成功');
        if (this.loginForm.username === 'admin') {
          this.isLogin = true
        this.$emit('formlogin', this.isLogin)
        } else {
          this.isLogin = false
        this.$emit('formlogin', this.isLogin)
        }
        // localStorage.setItem('islogin', false);
        // this.$emit('formlogin', this.isLogin)
        // this.$emit('formlogins', this.isLogin)
      } else {
        if (this.loginForm.username == '' && this.loginForm.password == '') {
          this.$message.error('账号或密码为空')
        } else {
          this.$message.error('账号或密码错误')
        }
      }
    },
    // 注册
    register() {
      this.$router.push('/login')
    },
    // 退出
    loginout() {
      localStorage.removeItem('token')
      localStorage.removeItem('username')
      localStorage.removeItem('password')
      localStorage.removeItem('islogin');
      this.loginForm = {
        username: '',
        password: ''
      }
      this.islogout = !this.islogout
      this.isLogin = false
      this.$emit('formlogin', this.isLogin)
      // console.log(this.isLogin);
    },
    // 与后端判断是否存在token
    async existtoken() {
      try {
        const token = localStorage.getItem('token')
        let data = {
          token: this.token
        }
        // console.log(data);
        let res = await this.$api.usertoken(data)
        // console.log(res);
        if (res.code == 200) {
          this.islogout = false
          if(this.loginForm.username === 'admin') {
          this.isLogin = true
          }else{
          this.isLogin = false
          }
          this.$emit('formlogin', this.isLogin)
        } else {
          if (res.code == 403) {
            this.loginout()
          } else {
            this.islogout = true
            this.isLogin = false
            this.$emit('formlogin', this.isLogin)
          }
        }
      } catch (error) {
        console.error(error)
        this.islogout = true
      }


    }
  },
  created() {
    // 与后端判断是否存在token
    this.existtoken()
    // 从当地的拿取数据
    // console.log(this.isLogin);
    let storedUsername = localStorage.getItem('username');
    if (storedUsername) {
      this.loginForm.username = storedUsername;
    }
    // if (islogin === 'false') {
    //   this.isLogin = false;
    // }
  }
}
</script>
<style lang="less" scoped>
input::-webkit-input-placeholder {
  padding-left: 10px;
  font-size: 10px;
  color: #42a1a1;
  border: 1px solid white;
}
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Node.js 中进行登录,通常会使用 JSON Web Tokens(JWT)来验证用户身份。JWT 是一种安全的身份验证机制,它将用户身份信息编码为一个 JSON 对象,并使用密钥对其进行签名,生成一个加密的字符串。当用户进行后续请求,可以将 JWT 发送到服务器进行验证,以确保用户已经通过身份验证。 以下是使用 JWT 进行登录的基本流程: 1. 用户提供用户名和密码进行登录。 2. 服务器验证用户名和密码是否正确。 3. 如果用户名和密码正确,服务器会生成一个 JWT 并将其返回给客户端。 4. 客户端将 JWT 存储在本地,通常是在浏览器的 cookie 或本地存储中。 5. 当用户进行后续请求,客户端会将 JWT 发送到服务器进行验证。 6. 服务器会检查 JWT 是否有效,并验证其签名是否正确。 7. 如果 JWT 有效且签名正确,服务器会将相应的数据返回给客户端。 以下是一个示例代码,使用 Node.js 和 Express 框架来实现 JWT 验证: ```javascript const jwt = require('jsonwebtoken'); const express = require('express'); const app = express(); // 定义一个密钥 const secretKey = 'my_secret_key'; // 登录验证 app.post('/login', (req, res) => { // 获取用户名和密码 const { username, password } = req.body; // 验证用户名和密码是否正确 if (username === 'admin' && password === 'password') { // 生成 JWT const token = jwt.sign({ username }, secretKey, { expiresIn: '1h' }); // 返回 JWT res.json({ token }); } else { res.status(401).json({ message: 'Invalid username or password' }); } }); // 身份验证 app.get('/protected', (req, res) => { // 获取 JWT const token = req.headers.authorization; // 验证 JWT try { const decoded = jwt.verify(token, secretKey); res.json({ message: 'Welcome to protected area', username: decoded.username }); } catch (err) { res.status(401).json({ message: 'Invalid token' }); } }); // 启动服务器 app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 在上面的代码中,我们首先定义了一个密钥 `secretKey`,然后在登录验证,使用 `jwt.sign` 生成一个 JWT,并将其返回给客户端。在身份验证,使用 `jwt.verify` 验证 JWT 是否有效,并从中提取出用户名。 请注意,JWT 应该在服务器端进行验证,因此在身份验证,我们需要从请求头中获取 JWT,而不是从客户端发送的数据中提取出 JWT。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值