uni app开发_uniapp官网

uni app开发_uniapp官网用uni-app开发app应用登陆

大家好,又见面了,我是你们的朋友全栈君。

后端程序

我使用的是laravel框架作为app的接口,前后端分离就涉及到登陆这个问题了,uni-app不支持读写cookie,所以不能使用cookie来保存登陆状态.后端我使用的是基于OAuth的扩展包Passport扩展包,这里就不细写安装这个扩展包的过程了.详情可以参考学院君的文章.

uni-app发送登陆请求

默认的uni-app是一个使用 Vue.js.竟然这里登陆状态没有cookie了,那么我们咋么保存登陆状态呢,我们是通过vuex存储登陆状态的.

const store = new Vuex.Store({
    state: {
        /** * 是否需要强制登录 */
        forcedLogin: false,
        hasLogin: false,
        userInfo:{},
    },
    mutations: {
        login(state, provider) {
			state.hasLogin = true;
            state.userInfo.access_token = provider.access_token,  //access_token 是授权令牌,接下来访问后端的接口都带上token
            state.userInfo.token_type = provider.token_type,      //token_type 表示认证类型是 Bearer,
			                                                      //我们可以将这个 access_token 值设置到 Bearer Authentication 请求头去请求需要认证的后端 API 接口
			uni.setStorage({
				key:'userInfo',
				data:provider,
			})
        },
        logout(state) {
            state.hasLogin = false;
			state.userinfo={};
			uni.removeStorage({
				key:'userInfo'
			})
        }
    }
})

export default store
复制代码

登陆页面

 bindLogin() {
				
                /** * 客户端对账号信息进行一些必要的校验。 * 实际开发中,根据业务需要进行处理,这里仅做示例。 */
                if (this.account.length < 5) {
                    uni.showToast({
                        icon: 'none',
                        title: '账号最短为 5 个字符'
                    });
                    return;
                }
                if (this.password.length < 6) {
                    uni.showToast({
                        icon: 'none',
                        title: '密码最短为 6 个字符'
                    });
                    return;
                }
				
                /** * 下面简单模拟下服务端的处理 * 检测用户账号密码是否在已注册的用户列表中 * 实际开发中,使用 uni.request 将账号信息发送至服务端,客户端在回调函数中获取结果信息。 */
                const data = {
					grant_type:'password',
					client_id: 1,   
					client_secret: '数据库中client_secret',//同上
					username: this.account,
					password: this.password,
                };
// const validUser = service.getUsers().some(function (user) { 
    
// return data.account === user.account && data.password === user.password;
// });

                uni.request({
                	url:'http://guohang.test/oauth/token', //获取访问令牌
					data:
					{
						grant_type:'password',
						client_id: 1,   //安装passport,完成间授权注册,数据库生成的
						client_secret: '数据库中client_secret',//同上
						username: this.account,
						password: this.password,
					},
					method:'POST',
					header:{
						'Access-Control-Allow-Origin': '*',  //跨域加上头
						'Content-Type': 'application/json; charset=UTF-8'
					},
					
					success:(res)=> {     检验成功返回状态码,访问令牌等参数,使用vuex保存状态,后面请求服务器接口都要带上
						const info={      
							access_token:res.data.access_token,
							token_type:res.data.token_type,
						};
					
						if(res.statusCode==200){
							this.login(info);
									 uni.reLaunch({
									 url:'../main/main',
									 });
						}else{
							uni.showToast({
							    icon: 'none',
							    title: '用户账号或密码不正确',
							});
						}	
							
					}, 
                })
				

            },...mapMutations(['login']) , 
复制代码

认证的页面

因为页面有些是需要登陆之后才能进行操作的,所以我们应该有个拦截器来进行判断是否登陆,没有登陆就跳转登陆页面,

 import {
        mapState,
		mapMutations
    } from 'vuex'

    export default {
        computed: mapState(['forcedLogin', 'hasLogin', 'userName']),
        onLoad() {
            if (!this.hasLogin) {
                uni.showModal({
                    title: '未登录',
                    content: '您未登录,需要登录后才能继续',
                    /** * 如果需要强制登录,不显示取消按钮 */
                    showCancel: !this.forcedLogin,
                    success: (res) => {
                        if (res.confirm) {
							/** * 如果需要强制登录,使用reLaunch方式 */
                            if (this.forcedLogin) {
                                uni.reLaunch({
                                    url: '../login/login'
                                });
                            } else {
                                uni.navigateTo({
                                    url: '../login/login'
                                });
                            }
                        }
                    }
                });
            }
        }
    }
复制代码

这只是一个很小的轮子,给你提供思路,最近自己在用这个做混合开发,所以做个并不是很细的笔记.

转载于:https://juejin.im/post/5c8915db6fb9a04a10302610

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106934.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vscode 快捷键绑定

    vscode 快捷键绑定最近迷上了vscode,用它开发.netcore程序十分方便,智能提示也很好用,插入智能提示的选项是enter键或者tab键,可惜我以前习惯使用vs写c#,习惯用空格做智能提示的选择,多方查找资料甚至准备采用开发一个vscode插件的方式解决,后来无意间查看官方文档,利用vscode的快捷键绑定功能是可以做到的。打开vscode,进入文件->首选项->键盘快捷方式查看’tab’的功能,其中就有一项:

    2022年5月18日
    39
  • 浅谈CMS垃圾收集器与G1收集器

    浅谈CMS垃圾收集器与G1收集器1、CMS收集器  CMS收集器是一种以获取最短回收停顿时间为目标的收集器。基于“标记-清除”算法实现,它的运作过程如下:1)初始标记2)并发标记3)重新标记4)并发清除  初始标记、从新标记这两个步骤仍然需要“stop the world”,初始标记仅仅只是标记一下GC Roots能直接关联到的对象,熟读很快,并发标记阶段就是进行GC Roots Tracing,而重新标…

    2022年5月8日
    43
  • 【论文精读】Parallax-Tolerant Image Stitching Based on Robust Elastic Warping

    【论文精读】Parallax-Tolerant Image Stitching Based on Robust Elastic Warping基于高鲁棒性的弹性扭曲视差容忍图像拼接算法

    2025年5月23日
    1
  • Kali Linux安装pip

    https://pip.pypa.io/en/stable/installing/

    2022年4月6日
    56
  • html浮雕效果代码_css内嵌式代码

    html浮雕效果代码_css内嵌式代码前言最近在看百度地图看到了一个效果,感觉这个效果用在网页上应该蛮赞的,于是就学习了一下。效果图如下:浮雕效果需要用到伸缩盒的知识(flex)flex在chrome是完全支持的,要加-webkit-前缀,其他的浏览器有的支持有的不支持,自己去查css手册,今天主要想讲一下怎么制作出浮雕效果先附上代码:<divclass=”title”>&…

    2022年9月5日
    3
  • matlab debounce,Debounce Temporal Properties

    matlab debounce,Debounce Temporal PropertiesTemporalOperatorsTheSimulink®DesignVerifier™libraryprovidesthreebasictemporaloperatorblockscanbeusedtomodeltemporalproperties.Theintentofthetemporaloperatorsistosupportthe…

    2022年6月20日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号