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)
上一篇 2022年4月21日 下午8:00
下一篇 2022年4月21日 下午8:00


相关推荐

  • shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量

    shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量

    2021年6月12日
    182
  • 安装使用quagga

    安装使用quaggahttp blog aka cool net blog 2015 05 18 try to use quagga 好吧 因为某些原因 需要学习一下 quagga 感觉对于网络通信不那么了解的我来说还是蛮困难的 这里简单记录备忘一下 quagga 简单说就是一个路由套件 可以让普通机器像路由器一样工作 实现很多网络相关的协议 bgp ospf rip 等等 因为牵扯到 b

    2026年3月16日
    2
  • openEuler安装_Java源代码会被编译成

    openEuler安装_Java源代码会被编译成openEulerLinux源代码编译安装Nginx升级系统和软件yum-yupdate关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld编辑/etc/selinux/config#SELINUX=enforcing修改为SELINUX=disabled#或者执行sed-i’s/SELINUX=enforcing/SELINUX=disabled/g’/etc/selinux/config保

    2026年4月16日
    5
  • vue中使用wangeditor_vue富文本编辑器tinymce

    vue中使用wangeditor_vue富文本编辑器tinymce富文本编辑器要求必填,否则alert(‘内容不能为空’),假设字段{{content}}当编辑器输入内容时,如果是字符,content=<p>字符XXXX</p>如果是图片,content=<p><imgsrc=”图片地址”/></p>如果是表情,content=<p>表情</p>如果是空格,content=<p>&nbsp;</p>如果是回车,co.

    2022年10月7日
    6
  • android计算器开发实例_安卓开发计算器代码

    android计算器开发实例_安卓开发计算器代码实习第四天了,第一天熟悉了一下java,这三天学习了解了一下安卓开发的一些基础知识。做了一个小程序—计算器,以此帖来记录一下。也许也有人可以参考一下)功能真的只有最基本哈哈,最最新手的人可以参考hh首先是activity_main.xml的布局代码<GridLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:tools=”http://schemas.android.com/tools”a

    2025年6月7日
    1
  • 高清播放之滤镜 – MadVR「建议收藏」

    高清播放之滤镜 – MadVR「建议收藏」转自:https://liutao.xyz/highdefinition_madvr/为什么推荐madVR作为渲染器1、madVR可以实现更精确的颜色处理。madVR全程在16bit/32bit下进行运算,精度远高于EVR/VMR等8bit,并抖动到8bitRGB输出。madVR的高精度运算和轻微的抖动噪声有着掩盖色带色块等作用。如果片源是10bit,madVR搭配ffdshow

    2025年11月16日
    4

发表回复

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

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