最近项目使用了Nuxt, 不过由于考虑到项目需要快速上线, 放弃了SSR, 直接采用单页面SPA模式进行开发, 也是本人第一次使用Nuxt来进行项目开发, 以下是我开发中对于鉴权这块的研究和总结, 因为官方给了一个鉴权示例是基于Server端的, 所以我就又写了一篇Client端的鉴权总结~

文章分为很多篇, 会逐步完善更新, 请耐心等待...

预备知识

  • Vue和Vuex
  • Document.cookie
  • HTTP 的基本性质
  • Window.localStorage和Window.sessionStorage

介绍

Nuxt.js 是一个基于 Vue.js 的通用应用框架。那么既然是基于Vue的, 它自然也就用到的Vuex, 那么会遇到一个问题, 它本是状态管理模式, 不过有时候我们会作为数据共享的一种解决方案, 但是它会在页面刷新时丢失.

因此在Vue项目开发中, 我们每次刷新获取数据可能只有两种方式:

  1. 每次刷新都会向服务器发送请求, 拿到数据后, 对页面重新更新视图
  2. 每次操作都会存在本客户端的Cookie或者Storage中

很显然一般情况下, 第一种方法会给服务器资源造成浪费, 除非需要获取的数据是频繁变化的, 那么我们一般会使用第二种. 下面就主要针对第二个方案进行总结.

需求分析

我们都知道HTTP是无状态的, 那么为了让用户每次访问页面的时候会话能够保持, 则需要用cookie或者storage来记录. 我们后台的session有效期为半小时.

在这半小时内, 用户处于登录状态, 本地也保存了有效凭证的情况下, 则该用户的有效资源请求可以被执行, 而无需服务器每次进行验证~

需求方希望本地存储的凭证会在会话关闭后清除, 因此我们首先排除localStorage, 考虑使用CookiesessionStorage! 又因为本人比较懒, Cookie操作比较麻烦, 所以决定使用sessionStorage.(虽然最后还使用了插件...)

基础实例

用sessionStorage存储Vuex全局data的方式展示

创建一个Nuxt应用

我们基于Nuxt的Starter的Cli来构建一个简单的Nuxt应用, 命令如下

vue init nuxt-community/starter-template nuxt-spa-demo
cd nuxt-spa-demo
npm i

修改模式为SPA模式

修改修改nuxt.config.js, 添加mode: 'spa',, 大致如下:

module.exports = {mode: 'spa',head: {...}...
}

创建Vuex基本内容

然后store目录创建一个index.js, 代码如下

export const state = () => ({counter: window.sessionStorage.getItem('counter') || 0
})export const mutations = {increment: state => {state.counter++window.sessionStorage.setItem('counter', state.counter)},decrement: state => {state.counter--window.sessionStorage.setItem('counter', state.counter)}
}

那么在Vuex的Mutatations中, 每次也会同时对sessionStorage进行操作.

另外在页面加载时, 先检查sessionStorage中是否存在counter这样一个变量, 如果没有则设置默认值0

创建一个可操作Vuex的界面

接着修改默认主页page/index.vue, 代码大致如下

<template><section class="container"><div class="demo-wrap"><app-logo/><h1 class="title">nuxt-spa-demo</h1><h2 class="subtitle">Nuxt with sessionStorage or cookie</h2><div class="content"><p>{{ counter }}</p><p><button @click="increment">+</button><button @click="decrement">-</button></p></div></div></section>
</template>
<template><section class="container"><div class="demo-wrap"><app-logo/><h1 class="title">nuxt-spa-demo</h1><h2 class="subtitle">Nuxt with sessionStorage or cookie</h2><div class="content"><p>{{ counter }}</p><p><button @click="increment">+</button><button @click="decrement">-</button></p></div></div></section>
</template><script>
import AppLogo from '~/components/AppLogo.vue'
import { mapState, mapMutations } from 'vuex'
export default {components: {AppLogo},computed: {...mapState(['counter'])},methods: {...mapMutations(['increment', 'decrement'])}
}
</script>
<style lang="scss" scoped>
...
</style>

运行应用并测试

修改基本完成后, 大致的效果可见该分支nuxt-auth-a, 然后运行应用

npm run dev

打开http://localhost:3000, 点击 +-, 数字变化后, 刷新页面, 可以观察到, 它并不会回到0, 那么一个简单的实例就完成了.

需要注意的是

  • sessionStorage的数据并不会在多个相同网站地址的窗口共享, 也就是说每次连接都是新的
  • sessionStorage存储的数据, 关闭当前标签, 重新开启, 数据会清空, 但是如果你并不是新的请求, 例如执行了__撤销上一次关闭的标签(Ctrl+Shift+T)__这样的操作, 他之前的数据依旧保留

总结

其实一个最简单的基于sessionStorage的存储数据的例子, 代码并不多, 但是一旦用于复杂的项目应用中, 也许这种处理方式并不好, 比如说需求变更带来的调整等等, 借助插件是一个不错的选择. 本次介绍的内容比较简单, 后面会逐步完善Nuxt鉴权的过程的思考.

本人也是边在学习边实践总结, 文中如有错误还请多多指正.

Nuxt在SPA模式下的鉴权处理(1)相关推荐

  1. 云调用,小程序鉴权正确姿势

    目录: 一.无处不在的鉴权 1. 现实生活中的身份鉴权方法 2. 简单的密码鉴权体系 二.鉴权优化 1. 频繁的鉴权场景下的优化方案 2. 第三方鉴权体现下的设计--oAuth 2.0鉴权体系 三.说 ...

  2. 微服务架构下的安全认证与鉴权

    微服务架构下的安全认证与鉴权 转载自:https://mp.weixin.qq.com/s/qBJ_257IWn3cctqmKfJ7FQ 作者:王海龙,来自:EAWorld 现任普元云计算架构师,毕业 ...

  3. 认证鉴权与API权限控制在微服务架构中的设计与实现

    引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的第一篇,本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现. 1. 背景 最近在做权限相关服务的开发, ...

  4. 认证鉴权与API权限控制在微服务架构中的设计与实现(一)

    作者: [Aoho's Blog] 引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的第一篇,本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现. 1. ...

  5. Spring Cloud与微服务学习总结(3)——认证鉴权与API权限控制在微服务架构中的设计与实现(一)

    本文转载自(http://blueskykong.com/2017/10/19/security1/) 1. 背景 最近在做权限相关服务的开发,在系统微服务化后,原有的单体应用是基于session的安 ...

  6. api postmain 鉴权_认证鉴权与API权限控制在微服务架构中的设计与实现(一)

    引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的第一篇,本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现. 1. 背景 最近在做权限相关服务的开发, ...

  7. 快捷支付各种绑卡鉴权方式

    1.背景 互联网金融平台账户进行开户或者支付业务时,绑卡鉴权环节是必经之路. 那么什么是绑卡鉴权?绑卡是将用户银行卡信息提供给金融平台,以后金融平台就用这个信息去银行完成支付.绑卡实际上是一个授权,让 ...

  8. Spring Cloud与微服务学习总结(6)——认证鉴权与API权限控制在微服务架构中的设计与实现(四)

    本文转载自(http://blueskykong.com/2017/10/26/security4/) 1. 前文回顾 首先还是照例对前文进行回顾.在第一篇 认证鉴权与API权限控制在微服务架构中的设 ...

  9. Kerberos鉴权后Spark程序连接Redis数据库,解决No Reachable node in cluster错误

    先说调测程序中遇到的问题: 1.以纯java脚本连接Redis,可以实现增删查等操作,程序如下: import com.huawei.jredis.client.KerberosUtil; impor ...

最新文章

  1. getprocaddress得到为0_拼接图像得到全景图
  2. uva1624knots
  3. int** 赋值_Python的赋值、浅拷贝、深拷贝之间的区别
  4. vscode生成vue模板快捷键_vs code 快速生成vue 模板
  5. MVVM  MVVM是Model-View-ViewModel的简写
  6. 「Python基础知识」Python中常用的内建函数有哪些
  7. PPAS数据库备份与恢复
  8. 类模板使用示例(二)类模板整体特化
  9. npm ERR! Error: EPERM: operation not permitted问题解决
  10. 拓展软文写作主题角度
  11. Hadoop 推测执行
  12. 使用插入排序、归并排序对链表进行排序
  13. CharacterController.Move called on inactive controller
  14. 2019java学习路线图
  15. vueTable大数据展示优化
  16. 单片机(仿真)编程软件和仿真软件的操作方法
  17. Mingw使用HPSocket的包装类
  18. Revit翻模软件:管件二维注释比例改变和【管道翻模】
  19. 技术与思维,哪个更重要?
  20. IATF16949认证辅导,促进减少在汽车零部件供应链中易发生的质量波动和浪费

热门文章

  1. 【Markdown语法】字体颜色大小及文字底色设置
  2. 应广单片机的RAM的清零方法
  3. MacOS安装brew教程从入门到入土
  4. crmeb打通版开源微信公众号小程序商城框架源码
  5. 悬赏任务h5系统源码接单发单平台支持游戏试玩签到
  6. 动态规划的一般解题思路-详解
  7. 习题4-9 打印菱形图案(打印图形)
  8. 测试藏宝图汉化版大图
  9. android 服务端技术,移动应用服务器端开发(基于JSP技术)-2017 Android系统构架 Android系统构架.docx...
  10. 【Windows】怎么查看CUDA版本?Conda命令安装和NVIDIA官网安装包安装的CUDA有何区别?nvcc -V和nvidia-smi获得的CUDA版本有何区别?如何指定CUDA版本?