一、注册登录功能的价值
首先我们来分析注册、登录功能的价值在哪里。换个角度说,为该产品设计注册登录功能的目的何在?对于每个产品来说,只有把握好产品的设计目标,才能找到适合该产品的设计思路。
我们从三个层面来分析:
1. 用户层面
- 用户需要在产品中获得一个独立的ID,以体现其个性化的存在。
- 用户需要产品为其记录使用进度、状态、收藏的内容。
- 用户希望获得其它用户的真实信息或更详尽的信息。
- 用户希望产品通过对自己更详尽的了解提供更好的服务。
2. 功能层面
- 便于跨设备同步数据,也便于在同一设备中切换不同的账户并保留账户之前的状态。
- 有社交功能的产品必须注册账号以编写自己的UGC的内容,同时便于其它用户辨识。
- 有交易功能的产品,为个人账户记录订单等交易信息,同时提高交易的安全性。
- 有应用内付费、VIP会员增值功能的产品,注册登录可以确保用户权益。
3. 业务层面
- 需要采集对于核心业务非常重要的用户信息,比如手机号、真实姓名等信息。
- 注册登录后便于采集推进运营的数据,以指导产品运营方向。
- 用户激励: 通过注册得到手机号、邮箱账户后,一些产品通过给用户发短信或优惠券(送优惠券、活动推荐)吸引用户,提高活跃度。
- 消费转化: 某些产品得到手机号后,会利用电话营销的方式向客户推介其付费服务。比如51Talk。
综上,在设计功能之前,产品经理应该弄清楚你的产品目标属于以上哪些,注册账户功能的重要性怎样,哪些核心功能与其相关联。
二 用户认证
后端实现
生成用户认证Token令牌
思路导图
- 表设计
客户端表这里可以不用关注,后期实现第三方登录会用到
- 生成Token令牌逻辑
- 实现
/** * 创建访问令牌 * 注意:该流程中,会包含创建刷新令牌的创建 * * 参考 DefaultTokenServices 的 createAccessToken 方法 * * @param userId 用户编号 * @param userType 用户类型 * @param clientId 客户端编号 * @param scopes 授权范围 * @return 访问令牌的信息 */ @Override public OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List<String> scopes) { // 从缓存中,校验客户端是否合法 OAuth2ClientDO clientDO = oauth2ClientService.validOAuthClientFromCache(clientId); // 创建刷新令牌 OAuth2RefreshTokenDO refreshTokenDO = createOAuth2RefreshToken(userId, userType, clientDO, scopes); // 创建访问令牌 return createOAuth2AccessToken(refreshTokenDO, clientDO); }这里的校验客户端是
访问令牌和刷新令牌表中需要的值,这里展示可以不用关注 - 这里token的生成策略是调用了hutoll工具类中:生成UUID工具
private static String generateRefreshToken() {
return IdUtil.fastSimpleUUID();
}