dev_xd
lijun 2024-10-16 00:24:58 +08:00
commit c55ea4a88e
8 changed files with 144 additions and 24 deletions

View File

@ -85,6 +85,20 @@ public class TokenController
return R.ok(maOpenId);
}
/**
*
* @param form
* @return
*/
@PostMapping("wxLogin")
public R<?> wxLogin(@RequestBody LoginBody form)
{
// 用户登录
LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
// 获取登录token
return R.ok(tokenService.createMobileToken(userInfo));
}
/**
*
* @param body
@ -96,7 +110,7 @@ public class TokenController
// 微信用户登录
LoginUser userInfo = sysLoginService.maLogin(body);
// 获取登录token
return R.ok(tokenService.createToken(userInfo));
return R.ok(tokenService.createMobileToken(userInfo));
}
/**
@ -197,7 +211,7 @@ public class TokenController
return R.ok();
}
@PostMapping("refresh")
@GetMapping("refresh")
public R<?> refresh(HttpServletRequest request)
{
LoginUser loginUser = tokenService.getLoginUser(request);
@ -207,8 +221,21 @@ public class TokenController
tokenService.refreshToken(loginUser);
return R.ok();
}
return R.fail();
}
@GetMapping("refreshMobile")
public R<?> refreshMobile(HttpServletRequest request)
{
LoginUser loginUser = sysLoginService.wxLogin(SecurityUtils.getUsername());
if (StringUtils.isNotNull(loginUser))
{
// 刷新令牌有效期
tokenService.refreshToken(loginUser);
return R.ok();
}
return R.fail();
}
@PostMapping("register")
public R<?> register(@RequestBody RegisterBody registerBody)

View File

@ -142,6 +142,54 @@ public class SysLoginService
return Convert.toStr(phoneResult.get("phoneNumber"));
}
/**
*
*/
public LoginUser wxLogin(String username)
{
// 查询用户信息
R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
throw new ServiceException("登录用户:" + username + " 不存在");
}
if (R.FAIL == userResult.getCode())
{
throw new ServiceException(userResult.getMsg());
}
LoginUser userInfo = userResult.getData();
SysUser user = userResult.getData().getSysUser();
if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
}
if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
throw new ServiceException("对不起,您的账号:" + username + " 已停用");
}
// 补充用户项目信息
if(Objects.nonNull(user.getActiveComId())){
userInfo.setProjectDeptId(user.getActiveComId());
}
if(Objects.nonNull(user.getActiveComName())){
userInfo.setProjectDeptName(user.getActiveComName());
}
if(Objects.nonNull(user.getActiveProjectId())){
userInfo.setProjectId(user.getActiveProjectId());
}
if(Objects.nonNull(user.getActiveProjectName())){
userInfo.setProjectName(user.getActiveProjectName());
}
return userInfo;
}
/**
*
*/

View File

@ -4,6 +4,10 @@ import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import com.yanzhu.common.core.constant.Constants;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.yanzhu.common.core.constant.CacheConstants;
@ -65,6 +69,33 @@ public class TokenService
return rspMap;
}
/**
*
*/
public Map<String, Object> createMobileToken(LoginUser loginUser)
{
String token = IdUtils.fastUUID();
Long userId = loginUser.getSysUser().getUserId();
String userName = loginUser.getSysUser().getUserName();
loginUser.setToken(token);
loginUser.setUserid(userId);
loginUser.setUsername(userName);
loginUser.setIpaddr(IpUtils.getIpAddr());
refreshMobileToken(loginUser);
// Jwt存储信息
Map<String, Object> claimsMap = new HashMap<String, Object>();
claimsMap.put(SecurityConstants.USER_KEY, token);
claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
// 接口返回信息
Map<String, Object> rspMap = new HashMap<String, Object>();
rspMap.put("access_token", JwtUtils.createToken(claimsMap));
rspMap.put("expires_in", expireTime);
return rspMap;
}
/**
*
*
@ -162,6 +193,21 @@ public class TokenService
redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
}
/**
* &&
*
* @param loginUser
*/
public void refreshMobileToken(LoginUser loginUser)
{
loginUser.setLoginTime(System.currentTimeMillis());
long exTime = (expireTime * MILLIS_MINUTE) * 9999;
loginUser.setExpireTime(loginUser.getLoginTime() + exTime);
// 根据uuid将loginUser缓存
String userKey = getTokenKey(loginUser.getToken());
redisService.setCacheObject(userKey, loginUser, expireTime * 9999, TimeUnit.MINUTES);
}
private String getTokenKey(String token)
{
return ACCESS_TOKEN + token;

View File

@ -134,7 +134,7 @@ public class SysUserUniopenController extends BaseController
*
*/
@InnerAuth
@GetMapping("/getMaPhoneNumber")
@PostMapping("/getMaPhoneNumber")
public R<Map<String, Object>> getMaPhoneNumber(@RequestBody WxMaLoginBody body) {
try {
// 调用解密方法获取手机号

View File

@ -9,9 +9,9 @@ export function getCodeImg() {
}
// 登录方法
export function login(data) {
export function wxLogin(data) {
return request({
url: '/wxApi/login',
url: '/auth/wxLogin',
method: 'post',
data: data,
})
@ -29,7 +29,7 @@ export function getMaOpenId(data) {
// 登录方法
export function maLogin(data) {
return request({
url: '/maLogin',
url: '/auth/maLogin',
method: 'post',
data: data,
})
@ -47,15 +47,15 @@ export function updatePwd(data) {
// 用户退出方法
export function loginOut() {
return request({
'url': '/wxApi/loginOut',
'url': '/auth/logout',
'method': 'get'
})
}
// 刷线用户信息
export function refreshUser() {
export function refreshMobileToken() {
return request({
'url': '/wxApi/refreshUserInfo',
'url': '/auth/refreshMobile',
'method': 'get'
})
}

View File

@ -3,5 +3,5 @@ module.exports = {
timeout: 60000,
appId: "wx2350a5efb3f28e66",
baseUrl: 'http://127.0.0.1:8080',
noSecuritys:['/code','/auth/login','/auth/getMaOpenId','/auth/getMaPhoneNumber','/auth/maLogin']
noSecuritys:['/code','/auth/wxLogin','/auth/getMaOpenId','/auth/getMaPhoneNumber','/auth/maLogin']
};

View File

@ -7,11 +7,11 @@ import {
setSessionKey,
} from '../../utils/auth'
import {
login,
wxLogin,
maLogin,
getCodeImg,
getMaOpenId,
refreshUser,
refreshMobileToken,
} from '../../api/login'
const app = getApp();
@ -53,7 +53,7 @@ Page({
if (getToken()) {
console.log("Authorization...{}", getToken());
//刷新权限信息
refreshUser().then(res => {
refreshMobileToken().then(res => {
if (res.code == '200') {
wx.redirectTo({
url: '../index/index',
@ -114,7 +114,7 @@ Page({
//启动蒙版
let that = this;
//发送请求
login({
wxLogin({
"username": username,
"password": password,
"code": code,
@ -140,11 +140,6 @@ Page({
iv: e.detail.iv,
encryptedData: e.detail.encryptedData
}
maLogin({})
}else{
//用户决绝授权
app.toast("请允许微信手机号一键登录");
}
maLogin(data).then(res =>{
setToken(res.access_token)
//跳转页面
@ -152,6 +147,10 @@ Page({
url: '../index/index',
})
})
}else{
//用户决绝授权
app.toast("请允许微信手机号一键登录");
}
},
})

View File

@ -28,7 +28,7 @@ export function register(data) {
export function refreshToken() {
return request({
url: '/auth/refresh',
method: 'post'
method: 'get'
})
}