前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5.登录验证,重定向及访问限制

5.登录验证,重定向及访问限制

作者头像
RtyXmd
发布2018-08-30 14:52:25
1.4K0
发布2018-08-30 14:52:25
举报
文章被收录于专栏:前端vue
项目地址

github地址、 码云地址

接上一篇,已经配置好了对应的页面及路由,整体逻辑就是在需要登录的页面(已经在meta中有needlogin属性)未登录无法访问,登陆页面在登录后无法访问,登录后跳转到原始访问的地址

登录页面

启动服务,通过路由手动进入登录页(目前为空白页)

image.png

登陆页面布局与登陆接口调用
代码语言:javascript
复制
//  html
<template>
  <div class="admin-login-container flex_center_center">
    <div class="admin-login-form">
      <h3>管理后台模板</h3>
      <el-form :model="loginForm" :rules="loginRules" ref="loginRuleForm" label-width="80px">
        <el-form-item label="用户名" prop="username">
          <el-input v-model="loginForm.username"></el-input>
        </el-form-item>
        <el-form-item label="密码" prop="password">
          <el-input type="password" v-model="loginForm.password"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="submitLoginForm('loginRuleForm')">登录</el-button>
          <el-button @click="resetLoginForm('loginRuleForm')">重置</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>
代码语言:javascript
复制
//  js
import { login } from "@/api/user";
export default {
  data() {
    return {
      //登录表单
      loginForm: {},
      //登录验证
      loginRules: {
        username: [
          {
            required: true,
            message: "请输入用户名",
            trigger: "blur"
          },
          { min: 3, max: 8, message: "长度在 3 到 8 个字符", trigger: "blur" }
        ],
        password: [{ required: true, message: "请输入密码", trigger: "blur" }]
      }
    };
  },
  methods: {
    //提交登录
    async submitLoginForm(form) {
      this.$refs[form].validate(async valid => {
        if (valid) {
          let res = await login(this.loginForm);
          if (res) {
            this.$message({
              message: "登录成功",
              type: "success"
            });
            this.$store.dispatch("setToken", res.token);
            this.$route.query.redirect
              ? this.$router.push(this.$route.query.redirect)
              : this.$router.push({ name: "Home" });
          }
        }
      });
    },
    //重置
    resetLoginForm(form) {
      this.$refs[form].resetFields();
    }
  }
};
代码语言:javascript
复制
//  css
.admin-login-container {
  height: 100%;
  background: #f6f6f6;
  .admin-login-form {
    width: 350px;
    padding: 20px;
    background: #fff;
    border-radius: 10px;
    text-align: center;
  }
}
方便起见引入全局css样式 上下左右居中
代码语言:javascript
复制
//  src/style/index.css
/* flex */
.flex_center_center {
  display: flex;
  justify-content: center;
  align-items: center;
}
此时打开登陆页面 如下图

登陆页面

这里登陆接口的服务端逻辑是在easy-mock中写的 账号:rty 密码:123,只是做一个简单的验证,可以直接调我的接口,也可以自己写验证密码的模拟逻辑,下图是我写的登陆接口逻辑 ,具体方法可以参考easy-mock文档

easy-mock登陆逻辑

登陆验证、重定向及限制访问

1.未登陆用户只能访问登陆、404页面,不能访问其他需要登陆权限的页面 2.在当前页面退出登陆后,再次登陆回重定向到之前的页面 3.已经登陆用户不能重复访问登陆页面 4.路由切换会验证用户登陆状态,为登陆会返回到登陆页

代码语言:javascript
复制
//  src/permission.js
import router from "./router";
import Storage from "@/tools/storage";
//progress
import Progress from "nprogress";
import "nprogress/nprogress.css";

router.beforeEach((to, from, next) => {
  Progress.start();
  if (to.matched.some(res => res.meta.needLogin && !Storage.get("token"))) {
    next({
      path: "/login",
      //将原生的跳转地址当作参数传入,后续登录成功之后,需要跳转到原始访问的地址
      query: { redirect: to.path }
    });
    Progress.done();
    return;
  }
  //登录状态下,不允许回退到登录页面
  if (to.path === "/login" && Storage.get("token")) {
    next(false);
    Progress.done();
    return;
  }
  next();
  Progress.done();
});

router.afterEach(() => {
  Progress.done(); // 结束Progress
});

全局引入登陆权限控制

代码语言:javascript
复制
//  src/main.js
import "@/permission";
最终效果预览

效果预览

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目地址
  • 登录页面
    • 登陆页面布局与登陆接口调用
      • 方便起见引入全局css样式 上下左右居中
        • 此时打开登陆页面 如下图
        • 登陆验证、重定向及限制访问
          • 最终效果预览
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档