在 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. PHP开发-模板的使用

    通过今天晚上半个多小时的赵老师对模板的介绍,大致对模板的使用.结构以及开发模板的思想有了个大致的了解. 为什么要开发模板:模板就是将PHP发过过程中使用到.需要操作的事物封装成对象.以便在使用到的时候 ...

  2. PHP笔记01

    php 环境 xamp wamp phpstudy等集成软件网上很多 PHP基础语法 PHP语法是以<?php开始 ?>结束的//php 文件的默认扩展名是.php 例如(用PHP输出he ...

  3. springboot项目 线程消费队列注入报错误空指针

    背景: 在调用阿里云隐私保护有一个通话记录的回执消息是一个消费线程队列,这个还别人告诉我的,因为我根本没有看出来哪里是个线程了,然后我就把它当成普通的代码拿到返回值以后然后插入数据库 可是我这边该加的 ...

  4. 【pwnable.kr】leg

    pwnable从入门到放弃第八题. Download : http://pwnable.kr/bin/leg.cDownload : http://pwnable.kr/bin/leg.asm ssh ...

  5. 11 ~ express ~ 解决 cookie 中文报错的问题

    使用cookies包需要注意:1,cookie中是不能有中文的,一旦有中文,就会报错2,cookie是通过 中间件的形式直接挂载到 req对象上的,那么cookies有的方法,req.cookies就 ...

  6. weex 随笔

    1.三大模块: <template>:样板,内容区 <style>:css <script>: js <script> export default{ ...

  7. C++编程学习(四)声明/枚举

    一.typedef 声明 typedef 为一个已有的类型取一个新的名字 typedef int num;//feet是int的另一个名字num a;//a是int类型 二.枚举类型 enum col ...

  8. pip2 install protobuf==2.6.1

    [libprotobuf FATAL google/protobuf/stubs/common.cc:61] This program requires version 3.5.0 of the Pr ...

  9. 201809-1 卖菜 Java

    思路: 需要两个数组,一个保存原始数据 import java.util.Scanner; public class Main { public static void main(String[] a ...

  10. Python 使用print实现进度

    import time print("0%",end='') time.sleep(2) print("\r1%",end='') time.sleep(2) ...