在 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. 五十一、SAP中使程序结构化,模块化

    一.我们创建3个引用单元,这3个单元里面分别存放定义相关,执行相关和子程序相关的内容 二.将程序中的各部分都拆分到INCLUDE文件中,DEF文件内容如下 三.INC文件内容 四.MAIN文件中写程序 ...

  2. 第二阶段scrum-6

    1.整个团队的任务量: 2.任务看板: 会议照片: 产品状态: 消息收发功能正在制作

  3. 干货分享:Research Essay写作规范详解

    同学们在刚到国外时觉得一切都很新鲜,感觉到处都在吸引着他们,但是大部分留学生在刚碰到Research Essay便是一头包.其实Research Essay也没有想象中的那么难,只是留学生们初次接触, ...

  4. JS确认取消按钮使用

    前几天写程序用到了点击提交之后弹出一个信息框确认提交有取消和确定按钮查阅了资料记录一手 if(window.confirm('你确定要提交吗?提交后将无法更改!')){ //这里填写提交代码 retu ...

  5. C++ 大文件读写

    //你必须映射一个只包含一小部分文件数据的文件视图.首先映射一//个文件的开头的视图.当完成对文件的第一个视图的访问时,可以取消它的映像,然后映射//一个从文件中的一个更深的位移开始的新视图.必须重复 ...

  6. MFC OCX 控件事件的添加和处理

    1.控件的事件一般都是由对外的接口引发到,这里定一个接口先: 该接口有一个字符串参数,表示调用者将传入一个字符串,传进来后,我们将取得字符串的长度. 2.添加事件: 事件应该是属于窗口的,所以在Ctr ...

  7. 【golang】golang的一些知识要点

    特殊常量iota: 1.iota的值在遇到const关键字时将被重置为0 2.const中每新增一行常量声明将使iota计数一次,也就是自动加一. 3.iota只能在常量定义中使用. iota常见使用 ...

  8. Egret Engine 2D - 遮罩

      矩形遮罩 shp.mask = new egret.Rectangle(20,20,30,50);   注意如果rec发生变化,需要重要将rec赋值给shp.mask 删除遮罩的方法 sprite ...

  9. filter滤镜兼容ie的rgba属性

    要在一个页面中设置一个半透明的白色div.这个貌似不是难题,只需要给这个div设置如下的属性即可: background: rgba(255,255,255,0.1); 但是要兼容到ie8.这个就有点 ...

  10. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring JDK动态代理

    JDK 动态代理是通过 JDK 中的 java.lang.reflect.Proxy 类实现的.下面通过具体的案例演示 JDK 动态代理的使用. 1. 创建项目 在 MyEclipse 中创建一个名称 ...