首页/生活百态/正文
小程序登录:获取用户昵称头像及相关配置与代码参考

 2025年08月31日  阅读 15

摘要:1.数据表准备开发小程序时需要先规划好数据表结构。主要涉及用户信息表、会话状态表等核心数据表。用户信息表应包含openid、unionid、昵称、头像等字段。会话状态表用于存储用户登录状态,包含session_key、过期时间等字段。2.反向生成工具使...

1. 数据表准备

开发小程序时需要先规划好数据表结构。主要涉及用户信息表、会话状态表等核心数据表。用户信息表应包含openid、unionid、昵称、头像等字段。会话状态表用于存储用户登录状态,包含session_key、过期时间等字段。

2. 反向生成工具使用

可以使用mybatis-generator等工具反向生成数据访问层代码。配置好数据库连接信息后,工具会自动根据表结构生成对应的实体类、Mapper接口和XML映射文件,大幅提高开发效率。

3. 前端数据封装

小程序端提交的数据需要经过封装处理。建议统一使用JSON格式传输数据,前后端约定好字段命名规范。对于用户信息等敏感数据,需要进行加密处理后再传输。

4. 服务器配置

小程序服务器需要配置HTTPS协议,这是微信小程序的强制要求。同时需要配置好域名白名单,只有经过验证的域名才能访问后端接口。建议使用Nginx做反向代理,配置合理的超时时间和连接数。

5. 微信SDK集成

后端需要集成微信小程序SDK来处理登录、支付等功能。主要包含以下步骤:

引入官方提供的SDK依赖

配置appid和appsecret

实现签名校验方法

配置消息加解密方式

6. 用户信息获取流程

获取用户信息的基本流程如下:

1. 小程序端调用wx.login获取code

2. 将code发送到开发者服务器

3. 服务器用code向微信服务器换取session_key和openid

4. 服务器保存session_key并生成自己的sessionid返回给客户端

5. 客户端后续请求携带sessionid进行身份验证

7. 登录状态维护

登录状态维护需要注意:

DROP TABLE IF EXISTS `wx_user`;
CREATE TABLE `wx_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名称',
  `password` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户密码',
  `gender` tinyint(3) NOT NULL DEFAULT 0 COMMENT '性别:0 未知, 1男, 1 女',
  `birthday` date NULL DEFAULT NULL COMMENT '生日',
  `last_login_time` datetime(0) NULL DEFAULT NULL COMMENT '最近一次登录时间',
  `last_login_ip` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '最近一次登录IP地址',
  `user_level` tinyint(3) NULL DEFAULT 0 COMMENT '用户层级 0 普通用户,1 VIP用户,2 区域代理用户',
  `nickname` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户昵称或网络名称',
  `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户手机号码',
  `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户头像图片',
  `weixin_openid` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '微信登录openid',
  `status` tinyint(3) NOT NULL DEFAULT 0 COMMENT '0 可用, 1 禁用, 2 注销',
  `add_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除',
  `share_user_id` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `user_name`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = Compact;

session_key有效期通常为30天

需要定期检查登录状态是否过期


    com.github.binarywang
    weixin-java-miniapp
    3.3.0

过期后需要客户端重新发起登录

oa:
  wx:
    app-id: wxf23b28b5e4ea4d6a

微信小程序开发者工具保存_wx.login会话密钥_小程序登录流程

app-secret: 212621faa31cdf0691367ea45b2b6041 msgDataFormat: JSON

服务器要妥善保管session_key,不能泄露给客户端

8. 数据安全注意事项

@Data
@Configuration
@ConfigurationProperties(prefix = "oa.wx")
public class WxProperties {
	/**
	 * 设置微信小程序的appId
	 */
	private String appId;
	/**
	 * 设置微信小程序的Secret
	 */
	private String appSecret;
	/**
	 * 消息数据格式
	 */
	private String msgDataFormat;
}

会话密钥session_key绝不下发到小程序端

临时登录凭证code只能使用一次

@Configuration
public class WxConfig {
	@Autowired
	private WxProperties properties;
	@Bean
	public WxMaConfig wxMaConfig() {
		WxMaInMemoryConfig config = new WxMaInMemoryConfig();
		config.setAppid(properties.getAppId());
		config.setSecret(properties.getAppSecret());
		config.setMsgDataFormat(properties.getMsgDataFormat());
		return config;
	}
	@Bean
	public WxMaService wxMaService(WxMaConfig maConfig) {
		WxMaService service = new WxMaServiceImpl();
		service.setWxMaConfig(maConfig);
		return service;
	}
}

用户敏感数据需要进行加密传输

@RequestMapping("/wx/auth")
public class WxAuthController {
    @Autowired
    private WxMaService wxService;
     @PostMapping("login_by_weixin")
    public Object loginByWeixin(@RequestBody WxLoginInfo wxLoginInfo, HttpServletRequest request) {
        //客户端需携带code与userInfo信息
        String code = wxLoginInfo.getCode();
        UserInfo userInfo = wxLoginInfo.getUserInfo();
        if (code == null || userInfo == null) {
            return ResponseUtil.badArgument();
        }

微信小程序开发者工具保存_wx.login会话密钥_小程序登录流程

//调用微信sdk获取openId及sessionKey String sessionKey = null; String openId = null; try { WxMaJscode2SessionResult result = this.wxService.getUserService().getSessionInfo(code); sessionKey = result.getSessionKey();//session id openId = result.getOpenid();//用户唯一标识 OpenID } catch (Exception e) { e.printStackTrace(); } if (sessionKey == null || openId == null) { log.error("微信登录,调用官方接口失败:{}", code); return ResponseUtil.fail(); }else{ log.info("openId={},sessionKey={}",openId,sessionKey); } //根据openId查询wx_user表 //如果不存在,初始化wx_user,并保存到数据库中 //如果存在,更新最后登录时间 //.... // token UserToken userToken = null; try { userToken = UserTokenManager.generateToken(user.getId()); } catch (Exception e) { log.error("微信登录失败,生成token失败:{}", user.getId()); e.printStackTrace(); return ResponseUtil.fail(); } userToken.setSessionKey(sessionKey); log.info("SessionKey={}",UserTokenManager.getSessionKey(user.getId())); Map result = new HashMap(); result.put("token", userToken.getToken()); result.put("tokenExpire", userToken.getExpireTime().toString()); result.put("userInfo", userInfo); //.... log.info("【请求结束】微信登录,响应结果:{}", JSONObject.toJSONString(result)); return ResponseUtil.ok(result); }

接口调用需要做好签名校验

用户信息存储要考虑字符编码问题,推荐使用utf8mb4支持emoji

9. 配置文件管理

小程序开发涉及多个配置文件:

小程序项目配置文件project.config.json

服务器配置文件如application.properties

数据库配置文件如my.ini

建议将敏感配置信息与代码分离,使用环境变量或配置中心管理。

user.loginByWeixin(res.userInfo).then(res => {
    app.globalData.hasLogin = true;
    wx.navigateBack({
    delta: 1
    })
})

版权声明:本文为 “博览广文网” 原创文章,转载请附上原文出处链接及本声明;

原文链接:http://wen.bjhwtx.com/post/37030.html

标签:

博览广文网

博览广文网为所有文学爱好者、新闻爱好者、关注生活多方面内容的观众朋友提供多方位的内容呈现、提升阅读空间、填充碎片时间,开阔读者的视野、增长见识、了解民生、一个让您不出户尽知天下事的网站平台!
热门标签
关于我们
广文舒阅网—让天下读者有家可归!这里汇聚了各类优质文化信息,无论是全球热点、历史故事,还是实用百科、趣味探索,您都能轻松获取。我们希望用阅读点亮您的世界,让每一次浏览都充满收获和乐趣。
导航栏A标题
广文舒阅网
扫码关注
联系方式
全国服务热线:0755-88186625
Q Q:8705332
Email:admin@lanyu.com
地址:深圳市福田区海雅缤纷国际大厦5层501
Copyright 深圳市蓝宇科技有限公司 版权所有 备案号:京ICP备20013102号-1