微信小程序的登录鉴权设计

小程序的登录鉴权是许多小程序必备的一个功能.

在鉴权方面,小程序是比较特殊的一种web应用。
在传统的前端项目中开发者是不能缓存账号密码的,在登录态过期后需要跳转到登录页让用户重新输入帐号密码来重新拿一个新的token。但是在小程序中不需要输入账号信息,通过和微信交互可以识别到用户是谁。

传统应用

1. 用户输入密码进行登录获取token
2. 缓存token
3. 访问其他页面
4. 下次进来调用当前页面接口不报错则继续让用户访问,接口返回token过期的错误信息则
5. 跳转到登录页面
一轮循环的情况
12345123
小程序

1. 首次进入小程序,调用wx.login(异步)获取到code传给后端去和微信解析出用户信息(openid,unionid之类的),返回token
2. 缓存token
3. 下次进来先wx.checkSession检查登录态是否过期
4. 过期则返回走第一步,没过期则继续
5. 请求当前页面接口
6. 当前页面接口若返回token过期则返回走第一步

一轮循环的情况
125123451234125,……(还有6的情况)
登录的场景,远比以前的情况多得多,所以需要人为的过滤一下。
优化后的小程序登录流程

1. 不管首次还是二次进入小程序都直接调用wx.login
	—— 因为wx.checkSession本身也是异步,而且不能保证和后端设置的token过期时间都是一致的,不如在小程序冷启动的时候直接login刷新token。
2. 缓存token
3. 访问其他页面
4. 如果普通接口返回登录过期,则返回第一步

🌟 因为小程序不需要账号密码,wx.login就等同于传统的输入密码,而且这个过程前端是可以主动触发,保证了每次进来都是新鲜的token。

!!因为wx.login是异步,而且小程序app.js中生命周期中加入异步和页面page.js生命周期中的异步不能保证按循序拿到返回值,所以要对wx.login成功回调处进行封装,有两种思路:

1. 设置回调函数
2. 拦截页面生命周期,等待wx.login成功后再执行页面生命周期的代码

推荐第二种方式,不需要每个页面加太多代码,方便简洁
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现微信小程序登录,可以使用Spring Security提供的OAuth 2.0协议实现。以下是基本的步骤: 1. 在微信开放平台中创建小程序,获取AppID和AppSecret。 2. 在Spring Security中配置OAuth 2.0客户端,设置微信小程序的AppID、AppSecret以及授权范围。 3. 创建一个Controller,处理微信小程序登录请求。在该Controller中,使用RestTemplate向微信平台发送请求,获取access_token和openid等信息。 4. 根据openid创建用户信息,并将用户信息存储在数据库中。 5. 在Spring Security中配置自定义的UserDetailsService,根据openid从数据库中查询用户信息并返回。 6. 在Spring Security中配置自定义的AuthenticationProvider,对用户进行认证。 具体实现细节可以参考Spring Security官方文档和示例代码。 ### 回答2: Spring Security可以用于实现微信小程序登录功能。下面是实现该功能的大概步骤: 1. 配置微信小程序开放平台的AppID和AppSecret,并获取sessionKey和openid。 2. 创建一个用于处理登录请求的接口,并在该接口中获取小程序传递的code参数。 3. 使用HTTP请求,向微信服务器发送code和之前配置的AppID、AppSecret,以获取openid和sessionKey。 4. 将获取到的openid和sessionKey存储在数据库中,作为用户的登录凭证。 5. 创建一个用户实体类,并添加相应的字段,比如openid、sessionKey等。 6. 实现一个自定义的UserDetailsService接口,用于根据openid查询用户信息。 7. 创建一个TokenGranter类,用于创建自定义的Token,包含openid和sessionKey等信息。 8. 实现一个自定义的AuthenticationProvider类,用于根据Token进行认证,并授权用户的访问权限。 9. 创建一个自定义的AuthenticationFilter类,用于处理登录请求,并验证用户的Token是否有效。 10. 将上述配置添加到Spring Security的配置类中,并配置相关的路径和权限。 通过上述步骤,我们可以实现微信小程序登录功能。用户通过小程序登录后,系统会根据openid查询用户信息,并通过Token进行认证和授权,确保用户可以访问相应的资源。同时,可以根据业务需求,在上述步骤中添加其他的逻辑处理。 ### 回答3: Spring Security是基于Java的安全框架,用于处理应用程序的认证和授权功能。要实现微信小程序登录,可以按照以下步骤进行: 1. 配置微信小程序登录:首先,需要在微信开发者平台注册小程序,并获取到小程序的AppID和AppSecret。然后,在Spring Security配置中,配置微信登录的认证提供商和回调URL。例如,在`SecurityConfig`类中可以使用`WeChatAuthenticationFilter`来处理微信登录流程和认证。 2. 创建WeChatAuthenticationFilter:继承`AbstractAuthenticationProcessingFilter`类,重写`attemptAuthentication`方法,实现微信登录的认证逻辑。在该方法中,将获取到的小程序code发送到微信服务器,通过code获取到微信用户的唯一标识OpenID和会话标识SessionKey。 3. 自定义AuthenticationProvider:创建一个自定义的`AuthenticationProvider`实现类,用于处理微信登录的认证逻辑。在该类中,可以根据微信的OpenID进行用户的查询和创建,生成用户的凭证信息,并返回一个实现了`Authentication`接口的认证对象。 4. 处理认证成功和失败的逻辑:在`SuccessfulAuthenticationHandler`中处理认证成功的逻辑,例如生成并返回JWT Token给前端;在`FailureAuthenticationHandler`中处理认证失败的逻辑,例如返回登录失败的提示信息给前端。 5. 配置微信登录接口和拦截器:配置微信登录的接口路径和访问权限,使用`WeChatAuthenticationFilter`拦截微信登录请求,进行认证处理。 通过以上步骤,就可以实现Spring Security与微信小程序登录功能。当用户通过微信小程序登录时,将会调用相应的微信登录接口,并经过认证流程完成登录。根据需求可以进行进一步的用户信息补全、鉴权和授权等功能的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值