uniapp 单点登录
单点登录(SSO)概念
单点登录允许用户通过一次认证访问多个相互信任的应用系统。在UniApp中实现SSO通常需要结合后端服务(如OAuth2.0、JWT等)和前端逻辑。
实现方案一:基于JWT的SSO
核心流程
用户登录后,后端生成JWT令牌并返回给UniApp客户端。客户端存储令牌(如localStorage),后续请求携带该令牌进行鉴权。
代码示例(UniApp端)

// 登录请求
uni.request({
url: 'https://api.example.com/login',
method: 'POST',
data: { username: 'user', password: '123456' },
success: (res) => {
if (res.data.token) {
uni.setStorageSync('token', res.data.token); // 存储令牌
}
}
});
// 请求拦截(携带令牌)
uni.addInterceptor('request', {
invoke(args) {
args.header = {
...args.header,
Authorization: `Bearer ${uni.getStorageSync('token')}`
};
}
});
实现方案二:基于OAuth2.0的SSO
核心流程
通过授权服务器统一认证,获取access_token。UniApp作为客户端,通过跳转授权页或静默请求完成登录。
步骤说明

-
跳转至授权页(如微信OAuth2.0):
uni.navigateTo({ url: 'https://auth.example.com/oauth?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI' }); -
通过
redirect_uri回调解析code,换取access_token。
跨域与存储注意事项
- 域名配置:确保
manifest.json中配置合法域名(如微信小程序需加入request白名单)。 - 令牌安全:避免明文存储敏感信息,推荐使用
uni.setStorageSync加密或后端校验时效性。
第三方平台集成示例(微信小程序)
通过wx.login获取code,传给后端换取用户凭证:
wx.login({
success: (res) => {
uni.request({
url: 'https://api.example.com/wechat-auth',
data: { code: res.code }
});
}
});
调试与优化建议
- 使用
uni.getSystemInfo检测运行环境(H5/小程序/App),适配不同平台的SSO流程。 - 捕获
uni.request的失败回调,处理令牌过期或失效场景(如跳转重新登录)。
通过上述方法,UniApp可实现高效的单点登录,具体技术选型需结合项目需求和后端架构。






