Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
程序yang
unidocs-zh
提交
c1eb94b9
U
unidocs-zh
项目概览
程序yang
/
unidocs-zh
与 Fork 源项目一致
Fork自
DCloud / unidocs-zh
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录