vue项目实现用户登录 以及携带token
在Vue中创建登录表单非常简单,只需要使用v-model指令绑定用户输入的值,并在表单中添加一个按钮来触发登录即可。console.error(`登录失败,错误消息=${error}`);
vue退出登录 vue退出登录清除cookie
vue退出登录 vue退出登录清除cookie
调取登录接口 (首先明确一下要做到事情)
在前后端完全分离的情况下,Vue项目中实现token验证大致思路如下:
1、次登录的时候,前端调后端的登陆接口,发送用户名和密码
2、后端收到请求,验证用户名和密码,验证成功,就给前端返回一个token
3、前端拿到token,将token存储到localStorage和vuex中,并跳转路由页面
4、前端每次跳转路由,就判断 localStroage 中有无 token ,没有就跳转到登录页面,有则跳转到对应路由页面
5、每次调后端接口,都要在请求头中加token
6、后端判断请求头中有无token,有token,就拿到token并验证token,验证成功就返回数据,验证失败(例如:token过期)就返回401,请求头中没有token也返回401
7、如果前端拿到状态码为401,就清除token信息并跳转到登录页面
调取登录接口成功,会在回调函数中将token存储到localStorage和vuex中
1.
export default {
},
mods: {
/////判读账号密码是否输入,没有则alert 出来
}};
在store文件夹下的index.js 添加 token
Vue.use(Vuex);
const store = new Vuex.Store({
state: {
},
mutations: {
}});
export default store;
二,配置 路由导航守卫
import Router from 'vue-router';
import login from '@/components/login';
import home from '@/components/home';
Vue.use(Router);
routes: [
]});
// 导航守卫
// 使用 router.beforeEach 注册一个全局前置守卫,判断用户是否登陆
router.beforeEach((to, from, next) => {
if (to.path === '/login') {
} else {
}});
export default router;
三、请求头加token 在 main.js中添加
// 添加请求,在请求头中加token
config => {
},
error => {
});
token的过期可以自定义
四、如果前端拿到状态码为401,就清除token信息并跳转到登录页面
localStorage.removeItem('Authorization');
this.$router.push('/login');
66人点赞
前段学习
Vue项目启动过程以及配置
我们点击 npm run dev 的时候,这就是启动 Vue 工程项目,那么它启动过程是什么样的呢? Vue 项目启动过程,本文简要介绍。
在执行 npm run dev 的时候,会在当前目录中寻找 package.json 文件,包含项目的 名称版本 、 项目依赖 等相关信息。
从下图中可以看到, 启动 npm run dev 命令后,会加载 build/webpack.dev.conf.js 配置并启动 webpack-dev-server 。
webpack.dev.conf.js 中引入了很多模块的内容,其中就包括 config 目录下环境的配置文件。
可以看到,在 index.js 文件中包含 host 和 port 以及入口文件的相关配置,默认启动端口是 8080 ,这里可以进行修改。
index.html 的内容很简单,主要是提供一个 div 给 vue 挂载。
main.js 中, 引入了 vue 、 App 和 router 模块, 创建了一个 Vue 对象,并把 App.vue 模板的内容挂载到 index.html 的 id 为 app 的 div 标签下, 并绑定了一个路由配置。
上面 main.js 把 App.vue 模板的内容,放置在了 index.html 的 div 标签下面。查看 App.vue 的内容我们看到,这个页面的内容由一个 logo 和一个待放置内容的 router-view , router-view 的内容将由 router 配置决定。
HelloWorld 中主要是一些 Vue 介绍显示内容。
所以,页面关系组成是 index.html 包含 App.vue,const router = new Router({App.vue 包含 HelloWorld.vue 。
到这,我们开始安装 router 、 vuex 。
Ctrl+C 退出启动,继续执行 vue-cli ,脚手架安装插件 router 和 vuex 开始。
输入一个大写Y,按下Enter
vuex 是专门为 Vue.js 设计的状态管理库,以利用 Vue.js 的细粒度数据响应机制来进行高效的状态更新。
Vuex 主要有五部分:
① 安装 vuex
接下来我们在 src目录 下创建一个 vuex 文件夹
并在 vuex文件夹 下创建一个 store.js 文件
文件夹目录 长得是这个样子
在保证我们处于我们项目下,在命令行输入下面命令,然后,安装 vuex 。
② vuex 的关系图
③ 开始使用,在 mian.js 中,引入 vuex
④然后告知 vue 开始使用 vuex (Vue.use(Vuex))
在 store.js 文件中,引入 vuex 并且使用 vuex ,这里注意我的变量名是大写 Vue 和 Vuex
⑤接下来,在main.js中引入store
到这里算是,以及完成了。
我们再重新看一下此时的项目结构,多了rout})er.js和store.js,其它相关的文件也被修改
vue后台返回菜单路劲前端怎么处理
const response = await axios.t("/login", {1、首先设置前端反向,项目中根目录下env.dlopmen设置服务端访问路径,项目中根目录下data () {vue.config.js设置。
2、其次接口请求地址,项目中根目录下src/api/user.js添加相应接口。
3、请求头设置,后台接口请求需要前端每次请求时,在请求头中添加token、ip等相关数据,项目中根目录下src/utils/request.js,用户登录后,需要存储登录后,后端返回的等相关信息。
怎样实现Vue微信项目按需授权登录
// 进行过微信授权之后,重定向回来的中包含了微信的授权信息,可以将上截取的参数发送到,换取用户的token,随后进入上述有token时候的步骤这次给大家带来怎样实现Vue微信项目按需授权登录,实现Vue微信项目按需授权登录的注意事项有哪些,下面就是实战案例,一起来看一下。
项目采用Vue作为开发框架,用户浏览页面时有两种情况:
一种是需要用户先登录之后才能继续浏览;
另一种是用户无需登录即可随意浏览。
在无需用户登录的页面中,可能包含需要用户信息的作,此时就需要用户登录之后方能进行后续作。因此,需要对授权登录策略进行区分。
思路
1.一般而言,我们为微信开发的H5页面,进入页面的时候就进行鉴权,要求用户登录之后才能继续浏览。但由于产品需求,这个项目我们需要对不同页面的鉴权策略进行划分,按照一般与特殊进行设计:
2.一般情况,用户进入页面时间要求用户授权登录,按照常规的微信授权登录流程,登录之后,用户继续浏览。
3.特殊情况,为无需用户登录的页面配置白名单,只要进入存在于白名单的路由,不进入检测用户登录状态的函数,直接渲染页面。
对于用户未登录状态下进行的需要用户信息的作,按照我目前的理解,即使是基于微信的静默授权,页面也必须重新刷新,无法做到真正无感授权并且继续用户的作。因此我选择在前端层面给用户更友好的提示,让用户了解授权过程,缺点是前一次作仅仅是触发授权登陆,授权登录后,用户需要再次进行作。
// routerRule.js
export default function routerRule (router, whiteList = []) {
// other codes...
router.beforeEach( (to, from, next ) => {
// 因为授权登录涉及异步作,因此使用promise,成功的回调中调用next函数
new Promise((resolve, rejects) => {
if ( whiteListRouter.indexOf(to.path) !== -1 )axios.interceptors.request.use( {
resolve()
return
}// 常规页面授权登录过程
if (hasToken()) {
// codes,获取用户信息并且跳转所需跳转的页面
} else {
// 判断用户是否已经进行微信授权
if (hasAuthed()) {
getWechatUserInfo().then(res => {
resolve()
} else {
// 用户尚未进行微信授权,则调用微信授权的方法,进行授权登录。
getWechatAuth()
}}
}).then( res => {
next()
router.afterEach(( to, from ) => {
wxShare({ title: desc: link: logo: })
}本项目是在用户初次进行微信绑定时,就将用户的微信信息与本站的用户信息进行的绑定,因此在获取用户微信授权信息后,就可以获取到用户的token,从而获取用户在本站的其他用户信息。
在无需登录页面的进行需要权限的作的处理
根据上面的逻辑,进入白名单之后,整个函数已经被return掉,不会进入下面的鉴权过程。但是如果是在此种页面上进行需要权限的作,那么就需要触发授权登录流程,并且在授权之后,要一并获取用户信息。
// checkLogin.js
export function checkLogin({ redirectUrl, wxAuthLoading, wxAuthLoaded, callback } = {}) {
if (getToken()) {
// ...
callback && callback()
} else {
// 提示用户正在授权中
wxAuthLoading && wxAuthLoading()
getWechatAuth( redirectUrl || window.location.href ).then( res => {
// 授权完毕,提示用户授权成功
wxAuthLoaded && wxAuthLoaded()
}}同时,我们需要对路由白名单添加一些作
// routerRule.js
export default function routerRule (router, whiteList = []) {
// other codes...
router.beforeEach( (to, from, next ) => {
// 因为授权登录涉及异步作,因此使用promise,成功的回调中调用next函数
new Promise((resolve, rejects) => {
if ( whiteListRouter.indexOf(to.path) !== -1 ) {
// 如果已经进行微信授权但是没有token值的,就调用以下函数获取token值
if ( !hasToken() && hasAuthed() ) {
getWechatUserInfo().then(res => {
resolve()
}resolve()
return
}// 常规页面授权登录过程
if (hasToken()) {
// codes,获取用户信息并且跳转所需跳转的页面
} else {
// 判断用户是否已经进行微信授权
if (hasAuthed()) {
getWechatUserInfo().then(res => {
resolve()
} else {
// 用户尚未进行微信授权,则调用微信授权的方法,进行授权登录。
getWechatAuth()
}}
}).then( res => {
next()
// other codes...
}坑点以及不完善的地方
1.这个方案在用户授权之后,在路由跳转之前,一定要先获取用户信息,否则在上的微信授权信息就会丢失,获取用户信息就会失败。
2.这个方案的缺点在于,需要开发者对在免登陆页面的所有需权限作都加上checkLogin判断。由于这种需权限的作一般都是发送异步请求,所以如果不考虑减少不必要的异步请求的情况下,可以统一在请求的方法上设置,判断后端返回的code,如果返回的是用户未登录的code,就进行微信授权。这种做法开发过程比较方便,但是会在用户未登录情况下发送了一些不必要的请求给后端,感觉不太好。
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
阅读:
vue项目打包传送至
JS实现简单购物车功能代码分析
vue中实现浏览器全屏与退出全屏功能
```html在 标签中主要是放一个全屏与退出全屏的按钮,并绑定上点击 fullScreenClick 。全屏与退出全屏的按钮显示切换是通过变量 fullScreen 控制的。
router文件夹下的index.js在js中,设置当前全屏状态的初始值为 false 。由于全屏状态下 ,按 "Esc" 键退出全屏,浏览器不到 "Esc" 键的,所以需要通过浏览器窗口大小改变的去触发退出全屏。(如果全屏是单一页面的功能,记得在组件销毁的时候清除掉 window 中 resize 的绑定)。
VUE中从数据库拿到的数据怎么实现登录
如何使用Vue将从数据库中获取的数据用于实现登录?
在Vue中,我们经常需要从数据库中获取数据,用于解决前端工作中的各种需求。其中一个常见的需求是实现一个登录功能,这个功能需要从后台获取用户输入的用户名和密码,并进行验证,如果验证通过,则允许用户登录进入系统,否则将提示用户重新输入用户名和密码。下面,我们将介绍如何使用Vue从数据库中获取数据实现这个登录功能。
首先,我们需要在Vue组件中创建一个表单,用于让用户输入用户名和密码:
创建登录表单
用户```名:
密码:
登录
export default {import Vue from 'vue';
data() {
return {
username: "",
};
},
mods: {
login() {
// TODO: 登录作
},
},
};
注意,这里我们使用了v-model指令来绑定用户输入的值,这使得我们可以很方便地获取到用户输入的内容,并将其用于后续的登录作。
接下来,我们需要在Vue组件中实现登录功能。在这里,我们设后台API已经实现了一个/login接口,该接口接收用户名和密码,并进行验证。如果验证通过,则返回一个JWT令牌,否则返回一个错误消息。我们需要使用Vue的axios库来向后台发送登录请求,并处理返回结果:
实现登录功能需要使用到Vue的axios库,我们需要在Vue组件中导入该库,并使用它向后台发送登录请求。
import axios from "axios";
export default {
data() {
return {
username: "",
};
},
mods: {
async login() {
try {
username: this.username,
password: this.password,
});
const token = response.data.token;
console.log(`登录成功,token=${token}`);
// TODO: 登录成功作
} catch (error) {
// TODO: 登录失败作
}},
},
};
,我们需要在Vue组件中实现登录成功和失败时的作。如果登录成功,我们可以将JWT令牌存储在浏览器的localStorage中,并跳转到系统首页。如果登录失败,则应该向用户显示一个错误消息,并提示其重新输入用户名和密码。下面是完整的Vue组件代码:
完整的Vue组件代码
下面是完整的Vue组件代码。注意,这里我们使用了vue-router库来进行页面跳转作。
用户名:
密码:
登录
import axios from "axios";
import router from "@/router";
export default {
data() {
return {
username: "",
};
},
mods: {
async login() {
try {
username: this.username,
password: this.password,
});
const token = response.data.token;
console.log(`登录成功,token=${token}`);
localStorage.setItem("token", token);
router.push("/home");
} catch (error) {
alert("登录失败,请重新输入用户名和密码");
this.username = "";
this.password = "";
}},
},
};
在这个Vue组件中,我们成功实现了从数据库中获取数据,用于实现登录功能。通过使用v-model指令绑定表单元素的值,使用axios库向后台发送登录请求,并使用vue-router库进行页面跳转作,我们成功地实现了一个基于Vue的登录功能。
vue怎么写,默认页面div1 点击button后切换为div2并且能隐藏按钮
注意,这里我们使用了async/await语法来实现异步登录请求,并使用try/catch语句块来处理异步请求的错误。如果登录请求成功,我们会得到一个包含JWT令牌的响应,我们可以将该令牌存储在本地,以便后续使用。1、打开html开发软件,新建一个html文件。
2、在html文件上创建一个知button按钮道,然后给这个按钮设置一个id,在案例中把按钮的id设置为show。
3、然后创建一个隐藏的div,把需要隐藏的内容写到这个div上,然后给这个div设置一个id。
4、给div设置隐藏的样式。在
5、为but查看 route 目录下的 index.js ,我们发现这里配置了一个路由, 在访问路径 / 的时候, 会把 HelloWorld 模板的内容放置到上面的 router-view 中。ton按钮添加一个点击后隐藏内。点击button按钮后,把隐藏的div的display修改为block,这样点击后div就会显示了。
6、保存容好html后使用浏览器打开,点击button按钮就会发现隐藏的div就会显示出来了。
解决hbuilder打包vue项目app点击手机返回键直接退出app的问题
实现登录功能通过hbuilder将做了一部分的vue项目进行打包成app测试,发现打包成的app点击手机的返回键的时候直接退出了app,并不会返回上一页
password: "",于是去网上查了一下终于解决了这个问题
mui.js解决参考博客链接:
参考
15《Vue 入门教程》Vue 动态组件 & keep-alive
本小节我们将介绍 Vue 的动态组件,以及缓存 keep-alive 的使用。包括动态组件的使用方法,以及如何使用 keep-alive 实现组件的缓存效果。
动态组件是让多个组件使用同一个挂载点,并动态切换。动态组件是 Vue 的一个高级用法,但其实它的使用非常简单。keep-alive 是 vue 的内置组件,能在组件切换过程中将状态保存在内存中,防止重复渲染 DOM。
通过使用保留的 元素,动态地把组件名称绑定到它的 is 特性,可以实现动态组件:
实例演示exclude 示例:
"运行案例" 可查看在线运行效果
代码解释: HTML 代码第 2 行,我们使用动态组件 component,将当前需要展示的组件名通过变量 currentView 绑定到 component 的 is 属性上。 HTML 代码第 3-5 行,我们定义了三个按钮,通过点击按钮切换 currentView 的值。 JS 代码第 3-11 行,我们定义了组件 ComponentA、ComponentB、ComponentC。
最终的实现效果是:当点击按钮的时候会动态切换展示的组件。
keep-alive 是 Vue 提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在页面渲染完毕后不会被渲染成一个 DOM 元素。被 keep-alive 缓存的组件只有在初次渲染时才会被创建,并且当组件切换时不会被销毁。
keep-alive 的用法相对简单,直接使用 keep-alive 包裹需要缓存的组件即可:
实例演示
"运行案例" 可查看在线运行效果
代码解释: HTML 代码第 2-3 行,我们使用 keep-alive 包裹动态组件 component,将当前需要展示的组件名通过变量 currentView 绑定到 component 的 is 属性上。 HTML 代码第 5-7 行,我们定义了三个按钮,通过点击按钮切换 currentView 的值。 JS 代码第 3-29 行,我们定义了组件 ComponentA、ComponentB、ComponentC,分别定义了他们的 created 和 beforeDestroy 。
之前我们介绍过, keep-alive 缓存的组件只有在初次渲染时才会被创建。所以,我们通过修改 currentView 切换组件时,组件的 beforeDestroy 不会触发。若该组件是次渲染,会触发 created ,当再次切换显示该组件时,created 不会再次触发。
activated 和 deactivated 和我们之前学习的生命周期函数一样,也是组件的生命周期函数。不过, activated 和 deactivated 只在 内的所有嵌套组件中触发。 activated :进入组件时触发。 deactivated :退出组件时触发。
示例代码:
实例演示
"运行案例" 可查看在线运行效果
代码解释: JS 代码中,我们定义了组件 ComponentA、ComponentB,并分别定义了他们的 activated 和 deactivated 函数。 HTML 代码第 2-3 行,我们使用 keep-alive 包裹动态组件 component,将当前需要展示的组件名通过变量 currentView 绑定到 component 的 is 属性上。 HTML 代码第 5-6 行,我们定义了两个按钮,通过点击按钮切换 currentView 的值。当我们切换组件显示时,可以看到这样的打印信息:
include 和 exclude 是 keep-alive 的两个属性,允许组件有条件地缓存。 include: 可以是字符串或正则表达式,用来表示只有名称匹配的组件会被缓存。 exclude: 可以是字符串或正则表达式,用来表示名称匹配的组件不会被缓存。
示例:
实例演示
"运行案例" 可查看在线运行效果
代码解释: HTML 代码第 2-4 行,我们使用 keep-alive 包裹动态组件 component。给 keep-alive 指定需要缓存组件 ComponentA,ComponentB。 在之前的小节我们了解到 keep-alive 缓存的组件只有在初次渲染时才会被创建。所以,在案例中,组件 ComponentA 和 ComponentB 的 created 函数只有在次组件被创建的时候才会触发,而 ComponentC 的 created 函数当每次组件显示的时候都会触发。
实例演示
"运行案例" 可查看在线运行效果
代码解释: HTML 代码第 2-4 行,我们使用 keep-alive 包裹动态组件 component。给 keep-alive 指import Vuex from 'vuex';定不需要缓存组件 ComponentA,ComponentB。
本节,我们带大家学习了动态组件和缓存组件在项目中的运用。主要知识点有以下几点: