在 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. Azure Container Registry-基于开源 Docker Registry 的专用 Docker 注册表服务

    本文语雀知识库:https://www.yuque.com/seanyu/azure/acr 概述 Azure 容器注册表(Azrue Container Registry,简称ACR)是 Azure ...

  2. springboot - 返回JSON error 从自定义的 ErrorController

    使用AbstractErrorController(是ErrorController的实现),返回json error. 1.概览 2.基于<springboot - 映射 /error 到自定 ...

  3. springboot关闭whitelabel Error page

    当访问不存在的页面时报错: 如何关闭它?有2种方法, 方法1: application.properties中加入server.error.whitelabel.enabled=false 方法2:在 ...

  4. no_string_attached笔记

    下载附件以后,在终端中查看 第一次调试时发现权限不够 接着,返回文件夹,修改该目标权限 然后进行调试 使用info  reg 查看寄存器的值 发现eflags寄存器为0x282,然后x/282 $ea ...

  5. 自学Java第五章——《面向对象基础》

    5.1 类与对象 1.类:一类具有相同特性的事物的抽象描述. 对象:类的一个个体,实例,具体的存在. 类是对象的设计模板. 2.如何声明类? [修饰符] class 类名{    成员列表:属性.方法 ...

  6. iOS 多线程 GCD part3:API

    https://www.jianshu.com/p/072111f5889d 2017.03.05 22:54* 字数 1667 阅读 88评论 0喜欢 1 0. 预备知识 GCD对时间的描述有些新奇 ...

  7. .Net实现发送邮件功能

    public ActionResult AddPost()         {            ResponseResult result = new ResponseResult();     ...

  8. [题解] CF438E The Child and Binary Tree

    CF438E The Child and Binary Tree Description 给一个大小为\(n\)的序列\(C\),保证\(C\)中每个元素各不相同,现在你要统计点权全在\(C\)中,且 ...

  9. 阿里P7Java最全面试296题:阿里天猫、蚂蚁金服含答案文档解析

    [阿里天猫.蚂蚁.钉钉面试专题题目加答案] 不会做别着急:文末有答案以及视频讲解,架构师资料 1. junit用法,before,beforeClass,after, afterClass的执行顺序 ...

  10. [GWCTF 2019]枯燥的抽奖

    0x00 知识点 种子爆破 工具 http://www.openwall.com/php_mt_seed 0x01 解题 查看源码进入check.php zOHF0Cxp49 <?php #这不 ...