Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xinrenli
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
郑云飞
xinrenli
Commits
d1dbd353
Commit
d1dbd353
authored
Apr 03, 2023
by
郑云飞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
小程序静默登录获取openid
小程序获取手机号
parent
a5825c86
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
37 additions
and
29 deletions
+37
-29
yongqi-admin/src/main/java/com/yongqi/web/controller/system/SysLoginController.java
+5
-8
yongqi-admin/src/main/resources/application.yml
+0
-1
yongqi-common/pom.xml
+6
-0
yongqi-common/src/main/java/com/yongqi/common/core/domain/model/LoginUser.java
+5
-0
yongqi-system/src/main/java/com/yongqi/system/service/SysLoginService.java
+21
-20
No files found.
yongqi-admin/src/main/java/com/yongqi/web/controller/system/SysLoginController.java
View file @
d1dbd353
package
com
.
yongqi
.
web
.
controller
.
system
;
package
com
.
yongqi
.
web
.
controller
.
system
;
import
cn.dev33.satoken.annotation.SaIgnore
;
import
cn.dev33.satoken.annotation.SaIgnore
;
import
cn.dev33.satoken.context.SaHolder
;
import
com.yongqi.common.constant.Constants
;
import
com.yongqi.common.constant.Constants
;
import
com.yongqi.common.core.domain.R
;
import
com.yongqi.common.core.domain.R
;
import
com.yongqi.common.core.domain.entity.SysMenu
;
import
com.yongqi.common.core.domain.entity.SysMenu
;
...
@@ -85,7 +86,7 @@ public class SysLoginController {
...
@@ -85,7 +86,7 @@ public class SysLoginController {
Map
<
String
,
Object
>
ajax
=
new
HashMap
<>();
Map
<
String
,
Object
>
ajax
=
new
HashMap
<>();
// 生成令牌
// 生成令牌
String
token
=
loginService
.
xcxLogin
(
xcxCode
);
String
token
=
loginService
.
xcxLogin
(
xcxCode
);
ajax
.
put
(
"openId"
,
token
);
ajax
.
put
(
Constants
.
TOKEN
,
token
);
return
R
.
ok
(
ajax
);
return
R
.
ok
(
ajax
);
}
}
...
@@ -97,13 +98,9 @@ public class SysLoginController {
...
@@ -97,13 +98,9 @@ public class SysLoginController {
*/
*/
@SaIgnore
@SaIgnore
@PostMapping
(
"/xcxPhoneLogin"
)
@PostMapping
(
"/xcxPhoneLogin"
)
public
R
<
Map
<
String
,
Object
>>
xcxPhoneLogin
(
@NotBlank
(
message
=
"{xcx.code.not.blank}"
)
String
xcxCode
public
R
<
Map
<
String
,
Object
>>
xcxPhoneLogin
(
@NotBlank
(
message
=
"{xcx.code.not.blank}"
)
String
xcxCode
)
{
,
@NotBlank
(
message
=
"{xcx.code.not.blank}"
)
String
openId
)
{
LoginUser
loginUser
=
LoginHelper
.
getLoginUser
();
Map
<
String
,
Object
>
ajax
=
new
HashMap
<>();
return
loginService
.
xcxPhoneLogin
(
xcxCode
,
loginUser
);
// 生成令牌
String
token
=
loginService
.
xcxPhoneLogin
(
xcxCode
,
openId
);
ajax
.
put
(
Constants
.
TOKEN
,
token
);
return
R
.
ok
(
ajax
);
}
}
/**
/**
...
...
yongqi-admin/src/main/resources/application.yml
View file @
d1dbd353
...
@@ -142,7 +142,6 @@ security:
...
@@ -142,7 +142,6 @@ security:
-
/captchaImage
-
/captchaImage
-
/smsLogin
-
/smsLogin
-
/xcxLogin
-
/xcxLogin
-
/xcxPhoneLogin
# MyBatisPlus配置
# MyBatisPlus配置
# https://baomidou.com/config/
# https://baomidou.com/config/
...
...
yongqi-common/pom.xml
View file @
d1dbd353
...
@@ -154,6 +154,12 @@
...
@@ -154,6 +154,12 @@
<artifactId>
lock4j-redisson-spring-boot-starter
</artifactId>
<artifactId>
lock4j-redisson-spring-boot-starter
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<version>
1.2.83
</version>
</dependency>
<!-- 微信小程序 -->
<!-- 微信小程序 -->
<dependency>
<dependency>
<groupId>
com.github.binarywang
</groupId>
<groupId>
com.github.binarywang
</groupId>
...
...
yongqi-common/src/main/java/com/yongqi/common/core/domain/model/LoginUser.java
View file @
d1dbd353
...
@@ -102,6 +102,11 @@ public class LoginUser implements Serializable {
...
@@ -102,6 +102,11 @@ public class LoginUser implements Serializable {
private
Long
roleId
;
private
Long
roleId
;
/**
/**
* 用户openId
*/
private
String
openId
;
/**
* 获取登录id
* 获取登录id
*/
*/
public
String
getLoginId
()
{
public
String
getLoginId
()
{
...
...
yongqi-system/src/main/java/com/yongqi/system/service/SysLoginService.java
View file @
d1dbd353
...
@@ -8,10 +8,12 @@ import cn.dev33.satoken.secure.BCrypt;
...
@@ -8,10 +8,12 @@ import cn.dev33.satoken.secure.BCrypt;
import
cn.dev33.satoken.stp.StpUtil
;
import
cn.dev33.satoken.stp.StpUtil
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.yongqi.common.constant.CacheConstants
;
import
com.yongqi.common.constant.CacheConstants
;
import
com.yongqi.common.constant.Constants
;
import
com.yongqi.common.constant.Constants
;
import
com.yongqi.common.core.domain.R
;
import
com.yongqi.common.core.domain.event.LogininforEvent
;
import
com.yongqi.common.core.domain.event.LogininforEvent
;
import
com.yongqi.common.core.domain.dto.RoleDTO
;
import
com.yongqi.common.core.domain.dto.RoleDTO
;
import
com.yongqi.common.core.domain.entity.SysUser
;
import
com.yongqi.common.core.domain.entity.SysUser
;
...
@@ -45,6 +47,7 @@ import javax.servlet.http.HttpServletRequest;
...
@@ -45,6 +47,7 @@ import javax.servlet.http.HttpServletRequest;
import
java.rmi.ServerException
;
import
java.rmi.ServerException
;
import
java.time.Duration
;
import
java.time.Duration
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.function.Supplier
;
import
java.util.function.Supplier
;
/**
/**
...
@@ -116,8 +119,6 @@ public class SysLoginService {
...
@@ -116,8 +119,6 @@ public class SysLoginService {
public
String
xcxLogin
(
String
xcxCode
)
{
public
String
xcxLogin
(
String
xcxCode
)
{
// xcxCode 为 小程序调用 wx.login 授权后获取
// todo 以下自行实现
// 校验 appid + appsrcret + xcxCode 调用登录凭证校验接口 获取 session_key 与 openid
// 校验 appid + appsrcret + xcxCode 调用登录凭证校验接口 获取 session_key 与 openid
WxMaJscode2SessionResult
sessionInfo
=
null
;
WxMaJscode2SessionResult
sessionInfo
=
null
;
try
{
try
{
...
@@ -130,13 +131,24 @@ public class SysLoginService {
...
@@ -130,13 +131,24 @@ public class SysLoginService {
throw
new
RuntimeException
(
"获取微信信息失败"
);
throw
new
RuntimeException
(
"获取微信信息失败"
);
}
}
DbWxUser
user
=
loadUserByOpenid
(
sessionInfo
,
null
);
DbWxUser
user
=
loadUserByOpenid
(
sessionInfo
,
null
);
return
user
.
getOpenId
();
// 此处可根据登录用户的数据不同 自行创建 loginUser
XcxLoginUser
loginUser
=
new
XcxLoginUser
();
loginUser
.
setUserId
(
user
.
getId
());
loginUser
.
setUsername
(
user
.
getNickname
());
loginUser
.
setUserType
(
DeviceType
.
XCX
.
getDevice
());
loginUser
.
setOpenid
(
sessionInfo
.
getOpenid
());
// 生成token
LoginHelper
.
loginByDevice
(
loginUser
,
DeviceType
.
XCX
);
recordLogininfor
(
user
.
getNickname
(),
Constants
.
LOGIN_SUCCESS
,
MessageUtils
.
message
(
"user.login.success"
));
recordLoginInfo
(
user
.
getId
(),
user
.
getNickname
());
return
StpUtil
.
getTokenValue
();
}
}
public
String
xcxPhoneLogin
(
String
xcxCode
,
String
openId
)
{
public
R
<
Map
<
String
,
Object
>>
xcxPhoneLogin
(
String
xcxCode
,
LoginUser
loginUser
)
{
// xcxCode 为 小程序调用 wx.login 授权后获取
log
.
info
(
"登录用户:{}"
,
JSON
.
toJSONString
(
loginUser
));
// todo 以下自行实现
String
openId
=
loginUser
.
getOpenId
();
// 校验 appid + appsrcret + xcxCode 调用
登录凭证校验接口 获取 session_key 与 openid
// 校验 appid + appsrcret + xcxCode 调用
获取手机号接口
WxMaPhoneNumberInfo
newPhoneNoInfo
=
null
;
WxMaPhoneNumberInfo
newPhoneNoInfo
=
null
;
try
{
try
{
newPhoneNoInfo
=
wxMaService
.
getUserService
().
getNewPhoneNoInfo
(
xcxCode
);
newPhoneNoInfo
=
wxMaService
.
getUserService
().
getNewPhoneNoInfo
(
xcxCode
);
...
@@ -150,18 +162,7 @@ public class SysLoginService {
...
@@ -150,18 +162,7 @@ public class SysLoginService {
WxMaJscode2SessionResult
sessionInfo
=
new
WxMaJscode2SessionResult
();
WxMaJscode2SessionResult
sessionInfo
=
new
WxMaJscode2SessionResult
();
sessionInfo
.
setOpenid
(
openId
);
sessionInfo
.
setOpenid
(
openId
);
DbWxUser
user
=
loadUserByOpenid
(
sessionInfo
,
newPhoneNoInfo
.
getPhoneNumber
());
DbWxUser
user
=
loadUserByOpenid
(
sessionInfo
,
newPhoneNoInfo
.
getPhoneNumber
());
// 此处可根据登录用户的数据不同 自行创建 loginUser
return
R
.
ok
();
XcxLoginUser
loginUser
=
new
XcxLoginUser
();
loginUser
.
setUserId
(
user
.
getId
());
loginUser
.
setUsername
(
user
.
getNickname
());
loginUser
.
setUserType
(
DeviceType
.
XCX
.
getDevice
());
loginUser
.
setOpenid
(
sessionInfo
.
getOpenid
());
// 生成token
LoginHelper
.
loginByDevice
(
loginUser
,
DeviceType
.
XCX
);
recordLogininfor
(
user
.
getNickname
(),
Constants
.
LOGIN_SUCCESS
,
MessageUtils
.
message
(
"user.login.success"
));
recordLoginInfo
(
user
.
getId
(),
user
.
getNickname
());
return
StpUtil
.
getTokenValue
();
}
}
/**
/**
...
@@ -267,7 +268,7 @@ public class SysLoginService {
...
@@ -267,7 +268,7 @@ public class SysLoginService {
}
else
if
(
DeleteStatusEnum
.
DELETED
.
getCode
().
equals
(
user
.
getDeleteFlag
()))
{
}
else
if
(
DeleteStatusEnum
.
DELETED
.
getCode
().
equals
(
user
.
getDeleteFlag
()))
{
log
.
info
(
"登录用户:{} 已被停用."
,
sessionInfo
.
getOpenid
());
log
.
info
(
"登录用户:{} 已被停用."
,
sessionInfo
.
getOpenid
());
throw
new
RuntimeException
(
"当前用户已停用,请联系管理员"
);
throw
new
RuntimeException
(
"当前用户已停用,请联系管理员"
);
}
else
if
(
StringUtils
.
isNotEmpty
(
phone
)
&&
StringUtils
.
isNotEmpty
(
user
.
getMobile
())
)
{
}
else
if
(
StringUtils
.
isNotEmpty
(
phone
))
{
user
.
setMobile
(
phone
);
user
.
setMobile
(
phone
);
user
.
setAuthMobile
(
phone
);
user
.
setAuthMobile
(
phone
);
wxUserMapper
.
updateById
(
user
);
wxUserMapper
.
updateById
(
user
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment