Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
c1eb94b9
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3172
Star
105
Fork
804
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
93
列表
看板
标记
里程碑
合并请求
67
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
93
Issue
93
列表
看板
标记
里程碑
合并请求
67
合并请求
67
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
未验证
提交
c1eb94b9
编写于
6月 17, 2022
作者:
DCloud_JSON
提交者:
Gitee
6月 17, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update docs/tutorial/app-oauth-weixin.md.
上级
918aaa1b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
78 addition
and
19 deletion
+78
-19
docs/tutorial/app-oauth-weixin.md
docs/tutorial/app-oauth-weixin.md
+78
-19
未找到文件。
docs/tutorial/app-oauth-weixin.md
浏览文件 @
c1eb94b9
> 此文档为App端登陆说明,H5和小程序端[详情](https://uniapp.dcloud.io/api/plugins/share.html#%E5%88%86%E4%BA%AB)
### 开通
-
登录
[
微信开放平台
](
https://open.weixin.qq.com/
)
,添加移动应用并提交审核,审核通过后可获取应用ID(AppID),AppSecret等信息
-
在应用详情中
`申请开通`
微信登录功能,根据页面提示填写资料,提交审核
-
申请审核通过后即可打包使用微信授权登录功能
更多信息详见微信官方文档
[
移动应用微信登录开放指南
](
https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html
)
> 更多信息详见微信官方文档 [移动应用微信登录开放指南](https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html)
### 配置
打开项目的manifest.json文件,在“App模块配置”项的“OAuth(登录鉴权)”下,勾选“微信登录”:
...
...
@@ -13,18 +13,90 @@
-
appid
微信开放平台申请应用的AppID值
-
appSecret
-
appSecret
(HBuilderX3.4.18+ 不再提供此参数的可视化配置,详见
[
配置参数安全性问题
](
#配置参数安全性问题
)
)
</br>
微信开放平台申请应用的AppSecret值
-
UniversalLinks
iOS平台通用链接,必须与微信开放平台配置的一致,推荐使用
[
一键生成iOS通用链接
](
https://uniapp.dcloud.io/api/plugins/universal-links.html
)
**注意**
-
HBuilderX中标准真机运行基座使用的是DCloud申请HBuilder应用的AppID等信息,仅用于体验微信登录功能
-
配置参数需提交云端打包后才能生效,真机运行时请使用
[
自定义调试基座
](
https://ask.dcloud.net.cn/article/35115
)
### 使用微信登录
1.
客户端调用api向微信请求授权,获取临时票据(code),向开发者业务服务器发起网络请求
2.
业务服务器通过code + 仅保存在服务器的appsecret参数,向:微信开放平台接口发起网络请求
[
详情
](
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317853&token=&lang=zh_CN
)
。
3.
业务服务器成功获取用户信息后,再依据unionid或openid查数据库的用户表并生成新token,并返回token给客户端
4.
客户端得到token后,保存到storage完成登陆。
示例代码
-
uni-app项目
```
js
uni
.
login
({
"
provider
"
:
"
weixin
"
,
"
onlyAuthorize
"
:
true
,
// 微信登录仅请求授权认证
success
:
function
(
event
){
const
{
code
}
=
event
//客户端成功获取授权临时票据(code),向业务服务器发起登陆请求。
uni
.
request
({
url
:
'
https://www.example.com/loginByWeixin
'
,
//仅为示例,并非真实接口地址。
data
:
{
code
:
event
.
code
},
success
:
(
res
)
=>
{
//获得token完成登陆
uni
.
setStorageSync
(
'
token
'
,
res
.
token
)
}
});
},
fail
:
function
(
err
)
{
// 登录授权失败
// err.code是错误码
}
})
```
> 相关API文档: [uni.login](https://uniapp.dcloud.io/api/plugins/login.html#login),[uni.request](https://uniapp.dcloud.io/api/request/request.html)
-
5+ App项目
```
js
var
weixinOauth
=
null
;
plus
.
oauth
.
getServices
(
function
(
services
)
{
for
(
var
i
in
services
)
{
var
service
=
services
[
i
];
// 获取微信登录对象
if
(
service
.
id
==
'
weixin
'
)
{
weixinOauth
=
service
;
break
;
}
}
weixinOauth
.
authorize
(
function
(
event
){
const
{
code
}
=
event
//客户端成功获取授权临时票据(code),向业务服务器发起登陆请求。
uni
.
request
({
url
:
'
https://www.example.com/loginByWeixin
'
,
//仅为示例,并非真实接口地址。
data
:
{
code
:
event
.
code
},
success
:
(
res
)
=>
{
//获得token完成登陆
uni
.
setStorageSync
(
'
token
'
,
res
.
token
)
}
});
},
function
(
err
)
{
// 登录授权失败
// err.code是错误码
})
},
function
(
err
)
{
// 获取 services 失败
})
```
> 相关API文档: [plus.oauth.getServices](https://www.html5plus.org/doc/zh_cn/oauth.html#plus.oauth.getServices),[plus.oauth.AuthService](https://www.html5plus.org/doc/zh_cn/oauth.html#plus.oauth.AuthService)
#### 配置参数安全性问题
HBuilderX中配置的appsecret参数,云端打包后会保存在apk/ipa中,存在参数泄露的风险!HBuilderX3.4.18+ 不再提供此参数的可视化配置。
对于安全性要求较低的开发者,可以通过manifest.json -> 源码视图 -> app-plus -> distribute -> sdkConfigs -> oauth -> weixin -> 添加appsecret 配置。即可不经业务服务器验证完成登陆:
-
uni-app项目
调用
[
uni.login(OBJECT)
](
api/plugins/login?id=login
)
发起授权登录,调用
[
uni.getUserInfo(OBJECT)
](
https://uniapp.dcloud.io/api/plugins/login?id=getuserinfo
)
获取用户信息,OBJECT参数中provider属性值固定为
`weixin`
...
...
@@ -74,17 +146,4 @@ plus.oauth.getServices(function(services) {
},
function
(
err
)
{
// 获取 services 失败
})
```
<a
id=
"secret"
/>
#### 配置参数安全性问题
HBuilderX中配置的appsecret参数云端打包后会保存在apk/ipa中,对于安全性要求高的开发者可能担心存在参数泄露的风险,可以采取以下方式处理。
-
在HBuilderX中仅配置appid,appsecret参数随意输入,调用
[
uni.login(OBJECT)
](
api/plugins/login?id=login
)
时设置
`onlyAuthorize`
为 true,成功回调中通过 info.code 获取授权临时票据(code)
-
通过服务器完成授权认证
在客户端获取授权临时票据(code)后提交业务服务器,在业务服务器使用code+appsecret向微信开放平台获取用户信息,这种方式appsecret仅保存在业务服务器,安全性更高
微信开放平台服务器的对接流程参考:
[
授权后接口调用
](
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317853&token=&lang=zh_CN
)
> 注:5+ App项目可以调用weixinOauth对象的 [authorize](https://www.html5plus.org/doc/zh_cn/oauth.html#plus.oauth.AuthService.authorize)方法请求授权获取临时票据(code)
```
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录