vue实现未登录跳转到登录页面的方法

Vue前端实现用户登录功能?

Vue项目中的用户登录和token认证及流程图

在前后端完全分离的情况下,Vue项目中实现token认证的大致思路如下:

一个简单的例子:

①登录接口调用成功,回调函数中将token存储到localS中。
在torage和vuex中(在login.vue中)

②store文件夹中的index.js

③路由控制器(router文件夹中的index.js)

④添加token到请求头

⑤如果前端状态码为401时,清除token信息并跳转到登录页面

流程图:

VUE项目注册及 实施

模板

? divclass="login-section"

el-form

?label-position="top"label-width="100px"class="demo-ruleForm"

?:rules="rules"

?:mod el="rulesForm"

状态图标

?ref="ruleForm"

?el-form-itemlabel="名称 用户"prop="name"

el-inputtype="text"v-model="rulesForm.name"/el-input

?/ el-form-item

?el-form-itemla bel="password"prop="password"

el-inputtype="password"?v -model="rulesForm.password"/el-input

? /el-form-item

?el-form-item

el-buttontype="primary"@click="submitForm('ruleForm' )"提交/el-button

el-button 重置/el-button

?/el-form-item

? ?/el-form

? div

/template

脚本

import{register}from'@/service/api';

exportdefault{

>

?data(){

返回{

?规则形式:{

name:'',

?密码:''

?},

?rule:{

name:[

{required:true, message:'请输入您的名字',trigger:"blurred"},

?{min:1,max:5,message:"长度3-5",trigger:"模糊"}

],

密码:[

{required:true,message:'请输入密码',trigger:"unclear"},

{min: 3 , max:5,message:"长度3-5",tr igger:"模糊"}

?]

?}

};

?}, < /p>

?方法:{

submitForm(formName){

? this.$refs[formName].validate((valid)={

if(valid){

// 如果身份验证已通过,将用户名和密码发送到后面

register({

?name: this. rulesForm.name,

?password:this.rulesForm.password,

}).then((数据)={

console.log(数据)

if(数据. code===0){

localStorage.setItem('token',data.data.token);

window.location.href='/';

}

if(da ta.code===1){

this.$message.error(data.mes)

? ?}

});

}其他{

控制台日志。
("错误提交!!");

returnfalse;

}

?}) ;

}

?}

}

/script

stylelang="stylus"

.login 部分

?padding0px20px

/style

templ eat

?divclass="login-section"

el-form

label-position="top"

?label-width="100px"cl ass="demo-ruleForm"

?:rules="rules"

?:model="rulesForm"

状态图标

?ref="rul eForm"

?el-form-itemlabel="username"prop="名称"

?el-inputtype = "text"v-model="rulesForm.name "/el-input

?/el-form-item

?el-form-itemlabel="password"prop="password"

el-inputtype="password d"v-model="rulesForm.password"/el-input

?/el-form-item

?el-form-item

el-buttontype="primary"@click="submitForm('ruleForm')"提交/el-button

el-buttonReset/el-button

?/el -form -item

? ?/el-form

?/div

/template

脚本

从'@/service/api导入{login} ';

exportdefault{

?data(){

return{

?//存储数据的对象

?rulesForm: {

名称:'',

密码:''

?},

?规则:{

?名称:[

{required:true,message:'请输入您的姓名',trigger:"blurred"},

? {min:1,max:5,message:"length 3-5",trigger:"blurred"}

],

password:[

{required:true,messwise:'请输入密码',trigger:"blurred"},

?{ min: 3,max:5,message:"长度3-5",trigger:"模糊" }

?]

?}

};

?},

?方法:{

?submitForm(formName){

? this.$refs[formName].validate((valid)={

if(valid){

// 如果校准通过,将用户名和密码发送回此处

login({

name:this.rulesForm .name,

login({

name:this.rulesForm .name,

说 路径:this.rulesForm.password,

?}).then((data)={

?console. log(数据)

if(data.code===0){

?localStorage.setItem('token',data .data .token);

?window.location.href ='/';

?}

?if(data.code===1){

this.$message.error(data.mes)

?}

? });

}其他{

console.log("错误提交!");

returnfalse;

}

?});

}

?}

}

/script

stylelang =“手写笔”


登录部分

?padding0px20px

/style

importVuefrom'vue'

importRouterfrom'vue-router'

Vue.use(路由器)

importStorefrom'@/stor e'

从'@/service/api.js'导入{userInfo}

importLoginfrom'@/views/user-login/index.vue'

constrouter=newRouter({

模式:"历史",

路由:[

{

路径:'/login',

?name:"log 登录",

title:"登录页面",

组件:登录,

?元:{

登录:true

}

?}

]

});

//控制器 route

router.beforeEach(async(to,from,next)={

/*

某些路由需要登录。
状态

1.无需登录:跳转到登录页面

部分路由不需要登录登录,直接输入

ps:是否需要登录--meta

*/

consttoken=localStorage.getItem('toke n');

constisLogin=!!token;

//进入路由时,需要发送令牌发送到后端以验证其是否有效

constdata=awaituserInfo();

Store.commit('chageUserInfo',data.data)

?if(to.matched.some(item=item.meta.login)){//需要登录

console.log("需要登录");

?if(isLogin){//已经登录,继续通过

if(data.error===400){//后台通知您, 登录 失败

next({name:'login'});

localStorage.removeItem('token') ;

return;

}

if( to.name== ='登录'){

next({name:'home'});

}其他{

next();

}

?返回;

?? ?}

?if(!isLoginto.name==='l ogin'){//未登录,但进入登录页面

? ? next();

}

if(!isLoginto.name!=='login'){//未登录登录,非登录页面

next({name: 'login' });

}

?}else{

?next();

?}

})

exportdefaultrouter;

11|登录前端实现

前端任务点,编写登录请求函数,类似于用户注册,前端获取用户名和密码启动POST请求。

如何持久存储收到的token以及如何在每次请求时携带token是这里的主要。

有关用户登录界面的详细信息,请点击此处。

这里有可以优化的点,以后可能需要添加代码等额外信息验证 目前需要添加函数参数,会很不方便,可以将参数数据格式包装成对象。
当然这里还是采用第一种方法。

这不是我们登录成功后要做的主要事情。

根据接口协议,我们登录成功后可以得到如下信息:

这里我们需要用到token字段 现在我们有了token,但是当我们登录的时候它就没有了刷新它,所以我们要做一些持久化存储,你可以把它存储在任何你想要的地方,只要你能找到它。
这里存储在localStorage中,在Chrome86中,也可以保存到本地文本文件中,但读取速度较慢。

除了token之外,我们还需要存储用户信息,比如首页显示的用户头像等信息。

关于本地信息的安全,本地存储的用户信息不会作为数据请求的凭据,而仅用于显示目的,当用户更改本地用户信息时,不会影响登录状态,因为后端根据token判断token有效,登录成功,不是本地服务器认为你就是你存储用户信息的人,前端不可信。
这种登录方式的危险在于用户的token被盗,但这很难避免,而最不安全的就是人。


当你进入主页面时,页面没有刷新,localStorage中的信息当前也没有更新到DOM中。
用户信息目前还是未进入登录页面的用户信息,自然无法显示。
很简单,刷新一下就可以了

当页面刷新时,会从localStorage中读取用户信息,并显示当前登录的用户。


我不想重新加载。

也很简单,设为响应式数据即可。
来吧,来吧 Vuex。

当你在cookie中存储token时,前端不需要主动设置它,默认是携带发送到服务器的,而这里我们存储在Authorization中,所以我们需要提供它,拦截请求并在发送之前添加请求令牌。

好的,我们来回顾一下整个过程。

当用户访问/login时,经过前端路由处理,路由到Login.vue,当用户填写账号时,用户看到登录框,填写自己的账号,姓名密码实时监控,显示的登录按钮影响可操作性 登录按钮只有在用户输入完整的账号密码后才可用。

首页收集用户信息,调用网络中包含的longin请求函数。

后端通过响应中的数据令牌触发突变,成功检查并响应更新 Vuex 中的状态,同时将令牌存储在 localStorage 中,以防止用户关闭页面和导致token丢失。

如果登录成功,会跳转到通过获取的用户头像等信息的首页Vuex 由于 Vuex 中的数据是响应式的,当你从登录跳转到首页时,用户的头像等信息也会相应更新。

当用户添加新文章时,只需将文章数据传输到服务器,后端从请求头中的token中获取文章作者的相关信息。
这里需要注意的是,前端不要使用本地用户信息作为正确的作者信息。
为了最大程度地减少对虚假信息的信任,用户可以完全将本地用户名从张三更改为李四,最终作者应由用户提供的令牌确定。

无密码登录实际上仍然需要“密码”,但它被替换为临时的、不可读的字符串,并且每次您要求时都会为您填写。

在不考虑安全性的情况下,你基本上把密码存储在浏览器中,然后每次访问网站时都要求浏览器帮你输入用户名和密码,这个过程对你来说很麻烦。
这样你就不用像白痴一样每次刷新都填写表格了。

填写表格是一件很无聊的事情。

是时候学习 TypeScript 了。

Vue项目:如何在后台管理系统登录页面实现密码记住功能?

在后台管理系统工作时,经常需要点击记住密码,然后登录系统,经过多次操作后又退出系统,您希望能够自动记住您的账号和密码。
上次登录 该功能未实现。

记住密码选项的值动态绑定到选中的值上,该值变为 false,选中时会分配一个 true 值,然后登录时通过该值传递帐号和密码。
目前,账户密码是根据其标记的布尔值存储在本地存储中的。
如果为 true,则保存帐户密码。
如果为 false,则其中存储一个空对象。
当用户完成操作后退出时,会返回到登录页面,此时登录组件的生命周期会执行一次,可以将本地存储的值重新赋值给登录页面的表单再次在生命周期中,一旦gus实现了登录时记住密码的功能。

3.1.1。
登录表单

3.1.2从父组件接收的数据

loginForm:账户数据和密码,有勾选:是否选择记住密码?

3. 1.3. 登录表单验证

3.1.4 登录表单深度监控

主要监控登录页面的返回,看表单页面的数据是否填写完毕。

如果有数据,则触发监听器,并运行init()方法来初始化表单。
3.1.5。
初始化init

重置布尔值

3.2.1. 子组件介绍

3.2. 判断本地缓存是否有数据,如果有,则在生命周期中在表单项上设置值

3.2.4. 发送按钮的逻辑操作

这部分需要判断是否记住密码被选中,如果选中的话,那么当前的账户密码会被存储为空对象,不仅会清除之前保存的账户和密码,同时也确保下次登录时不会导入数据。

3.2.5 保存用户设置的方法

该方法就是存储用户是否勾选了记住密码的选项

最后一个通用的函数是。
当然,出于安全考虑,最好先将md5加密后再存储到本地(也可以接受其他加密,例如AES加密),然后在安全生命周期中解密并设置值到表单项中。

vue项目实现用户登录,携带token

articleclass="_2rhmJa"

调用登录接口(先说明一下要做什么)

中在前后端完全隔离的情况下,Vue项目中实现token认证的大致思路如下:

1 首次登录时,前端适配后端登录接口并发送用户名和密码。

2. 后端收到请求,验证用户名和密码,如果验证成功,则返回token给前端

localStorage和vuex中3个token,并跳转到路由页面

4 前端每次跳转到路由页面时都会评估localStroage中是否有token到登录页面,如果有则跳转。
进入对应的路由页面

5 每当调整后端接口时,必须在请求头中添加token

6 后端判断请求头中是否有token ,如果有token,则获取token并验证token。
如果认证成功,则返回数据。
如果认证失败(例如:token过期),则返回401,请求头中没有token,则返回401。

7 If 部分前面得到一个状态码 If 401、清除token信息并跳转登录页面

登录接口调用成功,回调函数中会将token存储到localStorage和vuex中

1.template

div

/div

/template

exportdefault{

data(){

} ,

方法:{

///指定是否账号密码 包含,否则会出现警告

}

};

将令牌添加到存储文件夹中的index.js

importVuefrom' vue';

import tVuexfrom'vuex';

Vue.use(Vuex);

conststore=newVuex.Store({

状态:{

},

mutation:{

}

});

exportdefaultstore ;

其次,配置控制器路由导航

router文件夹中的index.js

importVuefrom'vue';

importRouterfrom'vue-router';

importloginfrom '@/components/login';

<

importhomefrom'@/components/home';

Vue.use(Router);

constrouter=newRouter({

路线:[

>

]

});

//导航控制器

//使用router.be

vue 项目的登陆界面无法跳转主界面问题,如何解决?

当遇到登录界面无法访问Vue项目主界面的问题时,应经常检查以下几个关键环节: 首先,确保路由配置文件(如router/index.js)正确,并且路由配置文件正确。
主界面的路由配置必须准确无误,才能保证您登录后能够顺利访问到预期的页面。
其次,检查登录逻辑,确保输入的信息正确,登录成功后正确使用$router.push()方法访问主界面。
另外,检查路由防护是否配置合理,防止非登录用户误访问主界面,并确保已登录用户能够无障碍访问。
同时检查网络请求的状态,确保连接请求成功,后端服务正常响应,响应状态码应为200,且响应正常。
如果有任何问题,请注册。
控制台上的详细信息。
最后,对于使用axios等网络查询库的项目,登录成功后应妥善保存用户信息,并使用$router.push()方法访问主界面。
通过检查上面的链接,确保项目各部分协同工作,可以有效解决Vue项目登录界面无法访问主界面的问题。

相关推荐

Python列表切片赋值技巧详解

Python列表切片赋值技巧详解

python列表切片赋值Python中的列表段赋值Python中,列表切片可以用来获取列表的子列表,也可以通过切片进行赋值操作来修改列表'list.list'。详细解释如下:1列表切片的基本概念

PHP主流框架对比:ThinkPHP、CI、Laravel、Yii优劣解析

PHP主流框架对比:ThinkPHP、CI、Laravel、Yii优劣解析

php主流框架都有什么各种主流PHP框架对比1、ThinkPHP框架的优点:简单易用(模型、控制器、视图负责各自的任务),有编译好的模板引擎,支持XML标签库技术,支持两种类型模板标签和动态

华硕电脑开机进入BIOS无法启动解决方案

华硕电脑开机进入BIOS无法启动解决方案

华硕主板开机后一直进入BIOS,该怎么解决呢?华硕开机后总会进入BIOS,但无法进入系统的问题可能是由硬件故障、BIOS设置错误或系统文件损坏引起的。解决此问题的方法包括检查硬