Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
hello_uni-id-pages
提交
66b56557
H
hello_uni-id-pages
项目概览
DCloud
/
hello_uni-id-pages
通知
1054
Star
31
Fork
43
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
2
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hello_uni-id-pages
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
66b56557
编写于
9月 07, 2022
作者:
DCloud_JSON
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复已知问题
上级
e08be6a1
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
247 addition
and
283 deletion
+247
-283
uni_modules/uni-id-pages/changelog.md
uni_modules/uni-id-pages/changelog.md
+12
-0
uni_modules/uni-id-pages/common/password.js
uni_modules/uni-id-pages/common/password.js
+1
-29
uni_modules/uni-id-pages/config.js
uni_modules/uni-id-pages/config.js
+10
-13
uni_modules/uni-id-pages/pages/login/login-withoutpwd.vue
uni_modules/uni-id-pages/pages/login/login-withoutpwd.vue
+3
-0
uni_modules/uni-id-pages/pages/register/register-by-email.vue
...modules/uni-id-pages/pages/register/register-by-email.vue
+1
-6
uni_modules/uni-id-pages/pages/register/register.vue
uni_modules/uni-id-pages/pages/register/register.vue
+1
-6
uni_modules/uni-id-pages/pages/userinfo/userinfo.vue
uni_modules/uni-id-pages/pages/userinfo/userinfo.vue
+219
-229
未找到文件。
uni_modules/uni-id-pages/changelog.md
浏览文件 @
66b56557
## 1.0.12(2022-09-07)
-
优化 适配pc端样式
-
新增 邮箱验证码注册
-
新增 邮箱验证码找回密码
## 1.0.11(2022-09-01)
-
修复 iOS端,一键登录功能卡在showLoading的问题
-
更新 合并密码强度与长度配置
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#config
)
-
uni-id-co 修复 调用 removeAuthorizedApp 接口报错的Bug
-
uni-id-co 新增 管理端接口 updateUser
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#update-user
)
-
uni-id-co 调整 为兼容旧版本,未配置密码强度时提供最简单的密码规则校验(长度大于6即可)
-
uni-id-co 调整 注册、登录时如果携带了token则尝试对此token进行登出操作
-
uni-id-co 调整 管理端接口 addUser 增加 mobile、email等参数
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#add-user
)
## 1.0.10(2022-08-25)
-
修复 导入uni-id-pages插件时未自动导入uni-open-bridge-common的Bug
## 1.0.9(2022-08-23)
...
...
uni_modules/uni-id-pages/common/password.js
浏览文件 @
66b56557
// 导入配置
import
config
from
'
@/uni_modules/uni-id-pages/config.js
'
const
passwordLength
=
config
.
password
.
length
const
passwordStrength
=
config
.
password
.
strength
const
{
passwordStrength
}
=
config
let
minPasswordLength
=
6
let
maxPasswordLength
=
20
if
(
passwordLength
)
{
if
(
passwordLength
[
0
])
{
minPasswordLength
=
passwordLength
[
0
]
}
if
(
passwordLength
[
1
])
{
maxPasswordLength
=
passwordLength
[
1
]
}
}
// 密码强度表达式
const
passwordRules
=
{
// 密码必须包含大小写字母、数字和特殊符号
...
...
@@ -37,11 +26,6 @@ const ERROR = {
strong
:
'
密码必须包含字母、数字和特殊符号,密码长度必须在8-16位之间
'
,
medium
:
'
密码必须为字母、数字和特殊符号任意两种的组合,密码长度必须在8-16位之间
'
,
weak
:
'
密码必须包含字母,密码长度必须在6-16位之间
'
},
passwordLengthError
:
{
normal
:
'
密码长度必须在
'
+
minPasswordLength
+
'
-
'
+
maxPasswordLength
+
'
位之间
'
,
minLimit
:
'
密码长度不得少于
'
+
minPasswordLength
+
'
位
'
,
maxLimit
:
'
密码长度不得超过
'
+
maxPasswordLength
+
'
位
'
}
}
...
...
@@ -52,16 +36,6 @@ function validPwd(password) {
return
ERROR
.
passwordStrengthError
[
passwordStrength
]
}
}
//长度校验
if
(
passwordLength
)
{
if
(
passwordLength
[
0
]
&&
password
.
length
<
passwordLength
[
0
])
{
return
ERROR
.
passwordLengthError
.
minLimit
}
if
(
passwordLength
[
1
]
&&
password
.
length
>
passwordLength
[
1
])
{
return
ERROR
.
passwordLengthError
.
maxLimit
}
}
return
true
}
...
...
@@ -106,8 +80,6 @@ function getPwdRules(pwdName = 'password', rePwdName = 'password2') {
export
default
{
ERROR
,
minPasswordLength
,
maxPasswordLength
,
validPwd
,
getPwdRules
}
uni_modules/uni-id-pages/config.js
浏览文件 @
66b56557
export
default
{
//调试模式
"
debug
"
:
tru
e
,
"
debug
"
:
fals
e
,
/*
登录类型 未列举到的或运行环境不支持的,将被自动隐藏。
如果需要在不同平台有不同的配置,直接用条件编译即可
...
...
@@ -43,16 +43,13 @@ export default {
"
web
"
:
"
xxxxxx
"
}
},
/**
* 密码强度
* super(超强:密码必须包含大小写字母、数字和特殊符号)
* strong(强: 密码必须包含字母、数字和特殊符号)
* medium (中:密码必须为字母、数字和特殊符号任意两种的组合)
* weak(弱:密码必须包含字母)
* 为空或false则不验证密码强度
*/
"
password
"
:
{
"
strength
"
:
"
medium
"
,
"
length
"
:
[
6
,
20
]
//密码长度,默认在6-20位之间
}
/**
* 密码强度
* super(超强:密码必须包含大小写字母、数字和特殊符号,长度范围:8-16位之间)
* strong(强: 密密码必须包含字母、数字和特殊符号,长度范围:8-16位之间)
* medium (中:密码必须为字母、数字和特殊符号任意两种的组合,长度范围:8-16位之间)
* weak(弱:密码必须包含字母和数字,长度范围:6-16位之间)
* 为空或false则不验证密码强度
*/
"
passwordStrength
"
:
"
medium
"
}
uni_modules/uni-id-pages/pages/login/login-withoutpwd.vue
浏览文件 @
66b56557
...
...
@@ -190,6 +190,9 @@
.quickLoginBtn
{
margin
:
20px
0
;
width
:
450rpx
;
/* #ifndef APP-NVUE */
max-width
:
230px
;
/* #endif */
height
:
82rpx
;
}
...
...
uni_modules/uni-id-pages/pages/register/register-by-email.vue
浏览文件 @
66b56557
...
...
@@ -19,7 +19,7 @@
</uni-forms-item>
<uni-forms-item
name=
"password"
v-model=
"formData.password"
required
>
<uni-easyinput
:inputBorder=
"false"
:focus=
"focusPassword"
@
blur=
"focusPassword = false"
class=
"input-box"
maxlength=
"20"
:placeholder=
"'请输入' +
passwordLength[0] + '-' + passwordLength[1] + '
位密码'"
type=
"password"
class=
"input-box"
maxlength=
"20"
:placeholder=
"'请输入' +
(config.passwordStrength == 'weak'?'6':'8') + '-16
位密码'"
type=
"password"
v-model=
"formData.password"
trim=
"both"
/>
</uni-forms-item>
<uni-forms-item
name=
"password2"
v-model=
"formData.password2"
required
>
...
...
@@ -116,11 +116,6 @@
logo
:
"
/static/logo.png
"
}
},
computed
:{
passwordLength
(){
return
config
.
password
.
length
}
},
onReady
()
{
this
.
$refs
.
form
.
setRules
(
this
.
rules
)
},
...
...
uni_modules/uni-id-pages/pages/register/register.vue
浏览文件 @
66b56557
...
...
@@ -19,7 +19,7 @@
</uni-forms-item>
<uni-forms-item
name=
"password"
v-model=
"formData.password"
required
>
<uni-easyinput
:inputBorder=
"false"
:focus=
"focusPassword"
@
blur=
"focusPassword = false"
class=
"input-box"
maxlength=
"20"
:placeholder=
"'请输入' +
passwordLength[0] + '-' + passwordLength[1] + '
位密码'"
type=
"password"
class=
"input-box"
maxlength=
"20"
:placeholder=
"'请输入' +
(config.passwordStrength == 'weak'?'6':'8') + '-16
位密码'"
type=
"password"
v-model=
"formData.password"
trim=
"both"
/>
</uni-forms-item>
<uni-forms-item
name=
"password2"
v-model=
"formData.password2"
required
>
...
...
@@ -67,11 +67,6 @@
logo
:
"
/static/logo.png
"
}
},
computed
:{
passwordLength
(){
return
config
.
password
.
length
}
},
onReady
()
{
this
.
$refs
.
form
.
setRules
(
this
.
rules
)
},
...
...
uni_modules/uni-id-pages/pages/userinfo/userinfo.vue
浏览文件 @
66b56557
<!-- 用户资料页 -->
<
template
>
<view
class=
"uni-content"
>
<view
class=
"avatar"
>
<uni-id-pages-avatar
width=
"260rpx"
height=
"260rpx"
></uni-id-pages-avatar>
</view>
<uni-list>
<uni-list-item
class=
"item"
@
click=
"setNickname('')"
title=
"昵称"
:rightText=
"userInfo.nickname||'未设置'"
link
>
</uni-list-item>
<
template
>
<view
class=
"uni-content"
>
<view
class=
"avatar"
>
<uni-id-pages-avatar
width=
"260rpx"
height=
"260rpx"
></uni-id-pages-avatar>
</view>
<uni-list>
<uni-list-item
class=
"item"
@
click=
"setNickname('')"
title=
"昵称"
:rightText=
"userInfo.nickname||'未设置'"
link
>
</uni-list-item>
<uni-list-item
class=
"item"
@
click=
"bindMobile"
title=
"手机号"
:rightText=
"userInfo.mobile||'未绑定'"
link
>
</uni-list-item>
<uni-list-item
v-if=
"hasPwd"
class=
"item"
@
click=
"changePassword"
title=
"修改密码"
link
>
</uni-list-item>
</uni-list>
<uni-list
class=
"mt10"
>
<uni-list-item
@
click=
"deactivate"
title=
"注销账号"
link=
"navigateTo"
></uni-list-item>
</uni-list>
<uni-popup
ref=
"dialog"
type=
"dialog"
>
<uni-popup-dialog
mode=
"input"
:value=
"userInfo.nickname"
@
confirm=
"setNickname"
title=
"设置昵称"
placeholder=
"请输入要设置的昵称"
>
</uni-popup-dialog>
</uni-popup>
<uni-id-pages-bind-mobile
ref=
"bind-mobile-by-sms"
@
success=
"getUserInfo"
></uni-id-pages-bind-mobile>
<button
v-if=
"hasLogin"
@
click=
"logout"
>
退出登录
</button>
<button
v-else
@
click=
"login"
>
去登录
</button>
</view>
</
template
>
<
script
>
const
db
=
uniCloud
.
database
();
const
usersTable
=
db
.
collection
(
'
uni-id-users
'
)
const
uniIdCo
=
uniCloud
.
importObject
(
"
uni-id-co
"
)
export
default
{
data
()
{
return
{
univerifyStyle
:
{
authButton
:
{
"
title
"
:
"
本机号码一键绑定
"
,
// 授权按钮文案
},
otherLoginButton
:
{
"
title
"
:
"
其他号码绑定
"
,
}
},
userInfo
:
{
mobile
:
''
,
nickname
:
''
},
</uni-list-item>
</uni-list>
<uni-list
class=
"mt10"
>
<uni-list-item
@
click=
"deactivate"
title=
"注销账号"
link=
"navigateTo"
></uni-list-item>
</uni-list>
<uni-popup
ref=
"dialog"
type=
"dialog"
>
<uni-popup-dialog
mode=
"input"
:value=
"userInfo.nickname"
@
confirm=
"setNickname"
title=
"设置昵称"
placeholder=
"请输入要设置的昵称"
>
</uni-popup-dialog>
</uni-popup>
<uni-id-pages-bind-mobile
ref=
"bind-mobile-by-sms"
@
success=
"getUserInfo"
></uni-id-pages-bind-mobile>
<button
v-if=
"hasLogin"
@
click=
"logout"
>
退出登录
</button>
<button
v-else
@
click=
"login"
>
去登录
</button>
</view>
</
template
>
<
script
>
const
db
=
uniCloud
.
database
();
const
usersTable
=
db
.
collection
(
'
uni-id-users
'
)
const
uniIdCo
=
uniCloud
.
importObject
(
"
uni-id-co
"
)
export
default
{
data
()
{
return
{
univerifyStyle
:
{
authButton
:
{
"
title
"
:
"
本机号码一键绑定
"
,
// 授权按钮文案
},
otherLoginButton
:
{
"
title
"
:
"
其他号码绑定
"
,
}
},
userInfo
:
{
mobile
:
''
,
nickname
:
''
},
hasLogin
:
false
,
hasPwd
:
false
}
},
async
onShow
()
{
this
.
univerifyStyle
.
authButton
.
title
=
"
本机号码一键绑定
"
this
.
univerifyStyle
.
otherLoginButton
.
title
=
"
其他号码绑定
"
},
async
onLoad
()
{
hasPwd
:
false
}
},
async
onShow
()
{
this
.
univerifyStyle
.
authButton
.
title
=
"
本机号码一键绑定
"
this
.
univerifyStyle
.
otherLoginButton
.
title
=
"
其他号码绑定
"
},
async
onLoad
()
{
this
.
getUserInfo
()
//判断当前用户是否有密码,否则就不显示密码修改功能
let
res
=
await
uniIdCo
.
getAccountInfo
()
this
.
hasPwd
=
res
.
isPasswordSet
},
methods
:
{
login
()
{
uni
.
navigateTo
({
url
:
'
/uni_modules/uni-id-pages/pages/login/login-withoutpwd
'
,
complete
:
(
e
)
=>
{
console
.
log
(
e
);
}
})
},
async
logout
()
{
await
uniIdCo
.
logout
()
uni
.
removeStorageSync
(
'
uni_id_token
'
);
uni
.
setStorageSync
(
'
uni_id_token_expired
'
,
0
)
uni
.
redirectTo
({
url
:
'
/uni_modules/uni-id-pages/pages/login/login-withoutpwd
'
,
});
this
.
hasPwd
=
res
.
isPasswordSet
},
methods
:
{
login
()
{
uni
.
navigateTo
({
url
:
'
/uni_modules/uni-id-pages/pages/login/login-withoutpwd
'
,
complete
:
(
e
)
=>
{
console
.
log
(
e
);
}
})
},
async
logout
()
{
await
uniIdCo
.
logout
()
uni
.
removeStorageSync
(
'
uni_id_token
'
);
uni
.
setStorageSync
(
'
uni_id_token_expired
'
,
0
)
uni
.
redirectTo
({
url
:
'
/uni_modules/uni-id-pages/pages/login/login-withoutpwd
'
,
});
},
changePassword
(){
uni
.
navigateTo
({
...
...
@@ -82,165 +82,155 @@
console
.
log
(
e
);
}
})
},
getUserInfo
(
e
)
{
uni
.
showLoading
({
mask
:
true
});
},
getUserInfo
(
e
)
{
uni
.
showLoading
({
mask
:
true
});
usersTable
.
where
(
"
'_id' == $cloudEnv_uid
"
).
field
(
'
mobile,nickname
'
).
get
().
then
(
res
=>
{
console
.
log
({
res
});
this
.
userInfo
=
res
.
result
.
data
[
0
]
console
.
log
(
'
this.userInfo
'
,
this
.
userInfo
);
this
.
hasLogin
=
true
}).
catch
(
e
=>
{
this
.
userInfo
=
{}
this
.
hasLogin
=
false
console
.
log
(
e
.
message
,
e
.
errCode
);
}).
finally
(
e
=>
{
// console.log(e);
uni
.
hideLoading
()
})
},
bindMobile
()
{
// #ifdef APP-PLUS
uni
.
preLogin
({
provider
:
'
univerify
'
,
success
:
this
.
univerify
(),
//预登录成功
fail
:
(
res
)
=>
{
// 预登录失败
// 不显示一键登录选项(或置灰)
console
.
log
(
res
)
this
.
bindMobileBySmsCode
()
}
})
// #endif
// #ifdef MP-WEIXIN
this
.
$refs
[
'
bind-mobile
'
].
open
()
// #endif
// #ifdef H5
//...去用验证码绑定
this
.
bindMobileBySmsCode
()
// #endif
},
univerify
()
{
uni
.
login
({
"
provider
"
:
'
univerify
'
,
"
univerifyStyle
"
:
this
.
univerifyStyle
,
success
:
async
e
=>
{
console
.
log
(
e
.
authResult
);
uniIdCo
.
bindMobileByUniverify
(
e
.
authResult
).
then
(
res
=>
{
console
.
log
(
res
);
this
.
getUserInfo
()
}).
catch
(
e
=>
{
console
.
log
(
e
);
}).
finally
(
e
=>
{
console
.
log
(
e
);
uni
.
closeAuthView
()
})
},
fail
:
(
err
)
=>
{
console
.
log
(
err
);
if
(
err
.
code
==
'
30002
'
||
err
.
code
==
'
30001
'
)
{
this
.
bindMobileBySmsCode
()
}
}
})
},
bindMobileBySmsCode
()
{
uni
.
navigateTo
({
url
:
'
./bind-mobile/bind-mobile
'
,
events
:
{
getUserInfo
:
()
=>
{
this
.
getUserInfo
()
}
},
complete
(
e
)
{
console
.
log
(
e
);
}
})
},
setNickname
(
nickname
)
{
console
.
log
(
nickname
);
if
(
nickname
)
{
usersTable
.
where
(
'
_id==$env.uid
'
).
update
({
nickname
}).
then
(
e
=>
{
console
.
log
(
e
);
if
(
e
.
result
.
updated
)
{
uni
.
showToast
({
title
:
"
更新成功
"
,
icon
:
'
none
'
});
this
.
userInfo
.
nickname
=
nickname
}
else
{
uni
.
showToast
({
title
:
"
没有改变
"
,
icon
:
'
none
'
});
}
})
this
.
$refs
.
dialog
.
close
()
}
else
{
this
.
$refs
.
dialog
.
open
()
}
},
deactivate
(){
uni
.
navigateTo
({
url
:
"
/uni_modules/uni-id-pages/pages/userinfo/deactivate/deactivate
"
})
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
@import
url("/uni_modules/uni-id-pages/common/login-page.scss")
;
.uni-content
{
padding
:
0
;
}
/* #ifndef APP-NVUE */
view
{
display
:
flex
;
box-sizing
:
border-box
;
flex-direction
:
column
;
}
@media
screen
and
(
min-width
:
690px
)
{
.uni-content
{
padding
:
0
;
max-width
:
690px
;
margin-left
:
calc
(
50%
-
200px
);
border
:
none
;
max-height
:
none
;
border-radius
:
0
;
box-shadow
:
none
;
}
}
/* #endif */
.avatar
{
align-items
:
center
;
justify-content
:
center
;
margin
:
22px
0
;
width
:
100%
;
}
.item
{
flex
:
1
;
flex-direction
:
row
;
justify-content
:
space-between
;
align-items
:
center
;
}
button
{
margin
:
10%
;
margin-top
:
40px
;
border-radius
:
0
;
background-color
:
#FFFFFF
;
width
:
80%
;
}
.mt10
{
margin-top
:
10px
;
}
</
style
>
console
.
log
({
res
});
this
.
userInfo
=
res
.
result
.
data
[
0
]
console
.
log
(
'
this.userInfo
'
,
this
.
userInfo
);
this
.
hasLogin
=
true
}).
catch
(
e
=>
{
this
.
userInfo
=
{}
this
.
hasLogin
=
false
console
.
log
(
e
.
message
,
e
.
errCode
);
}).
finally
(
e
=>
{
// console.log(e);
uni
.
hideLoading
()
})
},
bindMobile
()
{
// #ifdef APP-PLUS
uni
.
preLogin
({
provider
:
'
univerify
'
,
success
:
this
.
univerify
(),
//预登录成功
fail
:
(
res
)
=>
{
// 预登录失败
// 不显示一键登录选项(或置灰)
console
.
log
(
res
)
this
.
bindMobileBySmsCode
()
}
})
// #endif
// #ifdef MP-WEIXIN
this
.
$refs
[
'
bind-mobile
'
].
open
()
// #endif
// #ifdef H5
//...去用验证码绑定
this
.
bindMobileBySmsCode
()
// #endif
},
univerify
()
{
uni
.
login
({
"
provider
"
:
'
univerify
'
,
"
univerifyStyle
"
:
this
.
univerifyStyle
,
success
:
async
e
=>
{
console
.
log
(
e
.
authResult
);
uniIdCo
.
bindMobileByUniverify
(
e
.
authResult
).
then
(
res
=>
{
console
.
log
(
res
);
this
.
getUserInfo
()
}).
catch
(
e
=>
{
console
.
log
(
e
);
}).
finally
(
e
=>
{
console
.
log
(
e
);
uni
.
closeAuthView
()
})
},
fail
:
(
err
)
=>
{
console
.
log
(
err
);
if
(
err
.
code
==
'
30002
'
||
err
.
code
==
'
30001
'
)
{
this
.
bindMobileBySmsCode
()
}
}
})
},
bindMobileBySmsCode
()
{
uni
.
navigateTo
({
url
:
'
./bind-mobile/bind-mobile
'
,
events
:
{
getUserInfo
:
()
=>
{
this
.
getUserInfo
()
}
},
complete
(
e
)
{
console
.
log
(
e
);
}
})
},
setNickname
(
nickname
)
{
console
.
log
(
nickname
);
if
(
nickname
)
{
usersTable
.
where
(
'
_id==$env.uid
'
).
update
({
nickname
}).
then
(
e
=>
{
console
.
log
(
e
);
if
(
e
.
result
.
updated
)
{
uni
.
showToast
({
title
:
"
更新成功
"
,
icon
:
'
none
'
});
this
.
userInfo
.
nickname
=
nickname
}
else
{
uni
.
showToast
({
title
:
"
没有改变
"
,
icon
:
'
none
'
});
}
})
this
.
$refs
.
dialog
.
close
()
}
else
{
this
.
$refs
.
dialog
.
open
()
}
},
deactivate
(){
uni
.
navigateTo
({
url
:
"
/uni_modules/uni-id-pages/pages/userinfo/deactivate/deactivate
"
})
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
@import
url("/uni_modules/uni-id-pages/common/login-page.scss")
;
.uni-content
{
padding
:
0
;
}
/* #ifndef APP-NVUE */
view
{
display
:
flex
;
box-sizing
:
border-box
;
flex-direction
:
column
;
}
/* #endif */
.avatar
{
align-items
:
center
;
justify-content
:
center
;
margin
:
22px
0
;
width
:
100%
;
}
.item
{
flex
:
1
;
flex-direction
:
row
;
justify-content
:
space-between
;
align-items
:
center
;
}
button
{
margin
:
10%
;
margin-top
:
40px
;
border-radius
:
0
;
background-color
:
#FFFFFF
;
width
:
80%
;
}
.mt10
{
margin-top
:
10px
;
}
</
style
>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录