uni-app 中保持用户登录状态
uni-app 中保持用户登录状态 在应用中保持登录状态是一个应用常见的需求,本文简单介绍下在 uni-app 中如何保存用户登录状态。
简介
uni-app 中不支持读写 cookie,所以不能如传统的应用那样通过读取 cookie 来判断是否是登录状态。
在 uni-app 进行登录操作时,可以将需要校验的数据放在 uni.request
的 data 中,也可以在 header 里设置 token,使用 token 进行登录状态校验。
流程:首页为未登录状态 => 进行登录 => 首页状态改变 => 退出应用再次进入仍然是已登录状态。
vuex
使用 vuex 进行管理登陆状态和保存用户信息,下面是部分代码。
const store = new Vuex.Store({
state: {
uerInfo: {},
hasLogin: false
},
mutations: {
login(state, provider) { //改变登录状态
state.hasLogin = true
state.uerInfo.token = provider.token
state.uerInfo.userName = provider.user_name
uni.setStorage({ //将用户信息保存在本地
key: 'uerInfo',
data: provider
})
},
logout(state) { //退出登录
state.hasLogin = false
state.uerInfo = {}
uni.removeStorage({
key: 'uerInfo'
})
}
}
})
登录
在 login.vue
(登录页面)输入用户名密码后,调用 uni.request
进行登录,登录成功后调用 vuex 的方法改变应用的登陆状态。
<script>
import {
mapMutations
} from 'vuex';
export default {
methods: {
bindLogin(e) {
let name = e.detail.value.nameValue,
password = e.detail.value.passwordValue;
uni.request({
url: `${this.$serverUrl}/login.php`,
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
data: {
"username": name,
"password": password
},
method: "POST",
success: (e) => {
if (e.data.code === 0) { //登录成功后改变vuex的状态,并退出登录页面
this.login(e.data)
uni.navigateBack()
}
}
})
},
...mapMutations(['login'])
}
}
</script>
改变首页状态
通过 vuex 中保存的 hasLogin
判断是否是登录状态,从而显示不同的内容。
<template>
<view class="page">
<view v-if="!hasLogin">现在是未登录状态,点击按钮进行登录</view>
<view v-else>现在是登录状态,您的用户id是:{{uerInfo.userName}}</view>
<button type="primary" @click="bindLogin">{{hasLogin ? '退出登录' : '登录'}}</button>
</view>
</template>
<script>
import {
mapState,
mapMutations
} from 'vuex';
export default {
computed: mapState(['hasLogin','uerInfo']),
methods: {
...mapMutations(['logout']),
bindLogin() {
if (this.hasLogin) {
this.logout()
} else {
uni.navigateTo({
url: '/pages/login/login'
})
}
}
}
}
</script>
再次进入应用
在 App.vue
中判断用户是否保存用户信息 “uerInfo”,如果保存则认为是登录状态,未保存则为未登录状态。
App.vue
中得到用户信息后需要同步改变 vuex 的状态,使所有页面都能共享登陆状态与用户信息。
<script>
import {
mapMutations
} from 'vuex';
export default {
onLaunch: function () {
uni.getStorage({ //获得保存在本地的用户信息
key: 'uerInfo',
success:(res) => {
this.login(res.data);
uni.request({ // 再次校验并刷新token的有效时间
url: `${this.$serverUrl}/auth.php`,
header: {
"Content-Type": "application/x-www-form-urlencoded",
"Token":res.data.token
},
data: {
"username":res.data.user_name
},
method: "POST",
success: (e) => {
if (e.statusCode === 200 && e.data.code === 0) {
this.login(e.data);
}
}
})
}
});
},
methods: {
...mapMutations(['login'])
}
}
</script>
更多关于uni-app 中保持用户登录状态的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app 中保持用户登录状态的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app 中保持用户登录状态通常涉及在客户端存储用户的认证信息(如 JWT token),并在后续的请求中携带这些信息以验证用户身份。以下是一个示例,展示了如何在 uni-app 中实现这一功能。
1. 存储登录状态
用户成功登录后,将返回的 token 存储在本地存储(如 uni.setStorageSync
)中。
// 假设登录接口返回的数据结构为 { data: { token: 'xxx' } }
uni.request({
url: 'https://your-api.com/login',
method: 'POST',
data: {
username: 'user',
password: 'pass'
},
success: (res) => {
if (res.data && res.data.token) {
// 存储 token
uni.setStorageSync('user_token', res.data.token);
console.log('登录成功,token已保存');
} else {
console.error('登录失败');
}
},
fail: (err) => {
console.error('请求失败', err);
}
});
2. 自动附加 Token 到请求头
在每次发起请求前,从本地存储中获取 token 并附加到请求头中。可以使用 uni.request
的拦截器功能(虽然 uni-app 原生不支持拦截器,但可以通过封装请求函数实现)。
function requestWithAuth(url, method, data) {
const token = uni.getStorageSync('user_token');
return uni.request({
url,
method,
data,
header: {
'Authorization': `Bearer ${token}`
},
success: (res) => {
// 根据需要处理响应
console.log('请求成功', res);
},
fail: (err) => {
console.error('请求失败', err);
// 如果请求失败且状态码为401(未授权),可以执行登出操作
if (err.statusCode === 401) {
uni.removeStorageSync('user_token');
console.log('token失效,已登出');
}
}
});
}
// 使用封装好的请求函数
requestWithAuth('https://your-api.com/protected-endpoint', 'GET', {});
3. 检查登录状态
在应用启动时,可以检查本地存储中是否存在 token,以决定是否需要重定向到登录页面。
onLaunch: function () {
const token = uni.getStorageSync('user_token');
if (!token) {
// 跳转到登录页面
uni.redirectTo({
url: '/pages/login/login'
});
} else {
console.log('已登录,继续应用流程');
}
}
以上代码示例展示了如何在 uni-app 中保持用户登录状态,包括存储 token、自动附加 token 到请求头,以及在应用启动时检查登录状态。根据实际需求,可以对这些代码进行调整和扩展。