在 VuePress 中增加用户登录
  
  VuePress 是 Vuejs 官方提供的一个快速建设文档站点的工具,在简单配置好功能后,需要做的事情就剩下写好一个个 Markdown 文档。
  
  因为 VuePress 提供了可以在 Markdown 中使用 Vue 的能力,所以有时候,希望可以在它的文档功能基础上增加部分常规功能,比如用户登录;有团队希望公司建设的文档内容仅公司员工可查看,因为有可能会有涉及内容保密的部分
  
  VuePress 本身的安装配置过程不再赘述,可参考官方文档,本文将介绍使用 v-dialogs 对 VuePress 增加用户登录功能的进行改造,仅作为抛砖引玉,更多的需求,大家可以自由发挥想象。
  
  安装插件
  
  安装 v-dialogs 插件,将会使用它的模态窗口 (Modal) 和消息通知 (Alert) 的功能
  
  # npm
  
  npm i v-dialogs -D
  
  # yarn
  
  yarn add -D v-dialogs
  
  创建登录表单
  
  新增 Login.vue 文件用于登录表单,它将使用模态窗口(Modal)进行展示
  
  <template>
  
  <div class="login-form">
  
  <div class="form-header">User Name</div>
  
  <div>
  
  <input type="text" class="form-control" v-model="username">
  
  </div>
  
  <div class="form-header">Password</div>
  
  <div>
  
  <input type="password" class="form-control" v-model="password">
  
  </div>
  
  <div class="btn-row">
  
  <button class="btn" @click="login">
  
  OK
  
  </button>
  
  </div>
  
  </div>
  
  </template>
  
  <script>
  
  import { STORAGE_KEY } from './helper'
  
  export default {
  
  data () {
  
  return {
  
  username: '',
  
  password: ''
  
  }
  
  },
  
  methods: {
  
  login () {
  
  if (this.username && this.password) {
  
  const data = JSON.stringify({
  
  name: this.username,
  
  time: new Date().getTime()
  
  })
  
  // 登录成功后的逻辑处理,这里将数据保存在 localStorage 中仅作为功能演示
  
  window.localStorage.setItem(STORAGE_KEY, data)
  
  // 关闭窗口
  
  this.$emit('close', true)
  
  } else {
  
  this.$dlg.alert('Please complete the content', {
  
  messageType: 'warning'
  
  </script>
  
  <style lang="stylus">
  
  .login-form
  
  padding: 1rem
  
  display flex
  
  flex-direction column
  
  box-sizing border-box
  
  .btn-row
  
  margin-top 1rem
  
  .btn
  
  padding 0.6rem 2rem
  
  outline none
  
  background-color #60C084
  
  color white
  
  border 0
  
  .form-header
  
  color #666
  
  margin-bottom 0.5rem
  
  .form-control
  
  padding 0.6rem
  
  border 2px solid #ddd
  
  width 100%
  
  margin-bottom 0.5rem
  
  box-sizing border-box
  
  outline none
  
  transition border 0.2s ease
  
  &:focus
  
  border 2px solid #aaa
  
  </style>
  
  VuePress 配置
  
  在 /.vuepress 位置新增 enhanceApp.js 文件,该文件是 VuePress 对 应用级别的配置 的配置文件,文件 export default 了一个钩子函数,并接受一个包含了一些应用级别属性的对象作为参数。你可以使用这个钩子来安装一些附加的 Vue 插件、注册全局组件,或者增加额外的路由钩子等
  
  import { checkAuth } from './login/helper'
  
  import Login from './login/Login'
  
  export default ({
  
  Vue,
  
  options,
  
  router,
  
  siteData
  
  }) => {
  
  Vue.mixin({
  
  mounted() {
  
  const doCheck = (www.lannxinzc.cn) => {
  
  if (!checkAuth( www.tongyayule.com)) {
  
  this.$dlg.modal(Login, {
  
  width: 300,
  
  height: 350,
  
  title: www.mingheyl178.com'Employee login',
  
  singletonKey: 'employee-login',
  
  maxButton: false,
  
  closeButton: false,
  
  callback: data => {
  
  if (data =www.jintianxuesha.com== true)www.longtenghai2.com {
  
  // do some stuff after login
  
  代码中使用了 Vue.mixin 对全局进行了混入操作,所以在每个文档页面被访问后都会触发该 mounted() 生命周期进行用户权限的校验。在这里需要特别说明的是,原来对于权限检查的操作,本是希望在 Vue Router 的路由守卫中处理,但由于 浏览器的 API 访问限制 原因,Vue 插件在注册的过程中因为需要使用到浏览器的API (window 或 document),但在编译为静态文件的过程中,需要通过 Node.js 服务端渲染,因此所有的 Vue 相关代码都应当遵循 编写通用代码 的要求。简而言之,请确保只在 beforeMount 或者 mounted 访问浏览器 / DOM 的 API
  
  v-dialogs 在注册的过程中需要使用到 document 这个对象,所以在编译的过程中会出现 document is not defined 的错误信息,基于上述的原因,对于功能权限的检查在 mounted 生命周期中执行,并将该操作进行全局混入,才能达到全局校验的效果
  
  上述的代码编写部署并重新构建后,就会在每个文档页面中执行用户身份校验
  
  未登录,则弹出模态窗口要求输入身份信息进行校验
  
  已登录时就显示正确的文档内容
  
  实例
  
  可以访问下面的站点进行在线预览登录功能的改造

VuePress 中增加用户登录功能的更多相关文章

  1. 实现Web上的用户登录功能

    关于如何实现web上的自动登录功能 文章来源http://coolshell.cn/articles/5353.html Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能 ...

  2. 你会做Web上的用户登录功能吗?

    Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...

  3. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  4. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  5. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  6. Struts2整合Hibernate3实现用户登录功能

    所用技术:struts2 ,hibernate,jsp,mysql 本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰 ...

  7. JavaWeb学习记录(六)——用户登录功能

    使用JDBC.spring框架.servlet实现一个简单的用户登录功能. 一.mySql数据库 SET FOREIGN_KEY_CHECKS=0; -- ---------------------- ...

  8. 使用Struts1完成用户登录功能

    1.Struts框架 框架(framework):就是一系列代码和开发模式的整合,使用框架后,所有开发人员都会按照框架提供的规范进行开发,使代码更容易维护和扩展. 使用框架的优点: 1)   易于维护 ...

  9. 转:C4项目中验证用户登录一个特性就搞定

    转:C4项目中验证用户登录一个特性就搞定   在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性.     // 摘要:    //     表示一个特性,该特性用于限制调用 ...

随机推荐

  1. 【BZOJ2400】Optimal Marks

    题意 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. 给你一个有 \(n\) 个结点 \(m\) 条边的无向图.其中的一些点的值是给定的 ...

  2. POJ 1330 LCA最近公共祖先 离线tarjan算法

    题意要求一棵树上,两个点的最近公共祖先 即LCA 现学了一下LCA-Tarjan算法,还挺好理解的,这是个离线的算法,先把询问存贮起来,在一遍dfs过程中,找到了对应的询问点,即可输出 原理用了并查集 ...

  3. C#无边框应用

    引用using System.Runtime.InteropServices; 在窗体的全局模式下输入 [DllImport("user32.dll")] public stati ...

  4. python+opencv+dlib瘦脸效果

    对实现人脸瘦脸简单功能的一个记录,大概流程如下: 1.使用dlib检测出人脸关键点 2.使用Interactive Image Warping 局部平移算法实现瘦脸 参考:https://blog.c ...

  5. 吴裕雄--天生自然C++语言学习笔记:C++ 异常处理

    异常是程序在执行期间产生的问题.C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作. 异常提供了一种转移程序控制权的方式.C++ 异常处理涉及到三个关键字:try.catch.throw ...

  6. Python MySQL Delete

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...

  7. ELK 安装Beat

    章节 ELK 介绍 ELK 安装Elasticsearch ELK 安装Kibana ELK 安装Beat ELK 安装Logstash Beat是数据采集工具,安装在服务器上,将采集到的数据发送给E ...

  8. 初步了解URL

    URl的定义: 在webs上每种可用的资源(比如:HTML文档,图像,视频片段,程序等)都可以由一个通用的资源标志符(Universal Resource Identifier)进行定位.URl的组成 ...

  9. RMAN > BACKUP VALIDATE DATABASE ARCHIVELOG ALL

    使用BACKUP ... VALIDATE 命令: You can use the BACKUP VALIDATE command to do the following:        (1)Che ...

  10. 浅谈ASCII 、ISO8859-1、GB2312、GBK、Unicode、UTF-8 的区别。

    浅谈ASCII .ISO8859-1.GB2312.GBK.Unicode.UTF-8 的区别. 首先,先科普一下什么是字符编码.字符是指一种语言中使用的基本实体,比如英文中的26个英文字母,标点符号 ...