登录功能

143 阅读3分钟

一、注册登录功能的价值

首先我们来分析注册、登录功能的价值在哪里。换个角度说,为该产品设计注册登录功能的目的何在?对于每个产品来说,只有把握好产品的设计目标,才能找到适合该产品的设计思路。

我们从三个层面来分析:

1. 用户层面

  1. 用户需要在产品中获得一个独立的ID,以体现其个性化的存在。
  2. 用户需要产品为其记录使用进度、状态、收藏的内容。
  3. 用户希望获得其它用户的真实信息或更详尽的信息。
  4. 用户希望产品通过对自己更详尽的了解提供更好的服务。

2. 功能层面

  1. 便于跨设备同步数据,也便于在同一设备中切换不同的账户并保留账户之前的状态。
  2. 有社交功能的产品必须注册账号以编写自己的UGC的内容,同时便于其它用户辨识。
  3. 有交易功能的产品,为个人账户记录订单等交易信息,同时提高交易的安全性。
  4. 有应用内付费、VIP会员增值功能的产品,注册登录可以确保用户权益。

3. 业务层面

  • 需要采集对于核心业务非常重要的用户信息,比如手机号、真实姓名等信息。
  • 注册登录后便于采集推进运营的数据,以指导产品运营方向。
  • 用户激励: 通过注册得到手机号、邮箱账户后,一些产品通过给用户发短信或优惠券(送优惠券、活动推荐)吸引用户,提高活跃度。
  • 消费转化: 某些产品得到手机号后,会利用电话营销的方式向客户推介其付费服务。比如51Talk。

综上,在设计功能之前,产品经理应该弄清楚你的产品目标属于以上哪些,注册账户功能的重要性怎样,哪些核心功能与其相关联。

二 用户认证

后端实现

生成用户认证Token令牌

思路导图 image.png

  1. 表设计

image.png

image.png

image.png

客户端表这里可以不用关注,后期实现第三方登录会用到

  1. 生成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);
        }
    

    这里的校验客户端是访问令牌和刷新令牌表中需要的值,这里展示可以不用关注

  2. 这里token的生成策略是调用了hutoll工具类中:生成UUID工具
private static String generateRefreshToken() {
    return IdUtil.fastSimpleUUID();
}

校验Token令牌