微信登录出现问题(微信登录与令牌)
微信登录出现问题(微信登录与令牌)现在的客户端是小程序,可以自己设计一套账号体系来获取令牌,但是小程序已经提供了一套微信认证体系,没有必要再小程序里面设计自己的账号密码。小程序可以为每个登录的用户生成一个code,code就是一个数字码,我们需要将这个码传向getToken接口,这个code码是一个去微信的服务器去换取用户的身份的标识,微信服务器在接收到code码之后会返回两个重要的信息openid和session_key,openid就是用户身份的标识,session_key的作用是在小程序中直接访问微信服务器拿到一个加密信息,如果要解密这个信息就需要用到session_key,这个信息包括unique_id 这个ID表示的也是用户唯一标识,与openid的区别是,openid是一个用户针对一个小程序有一个openid,也就是说一个用户在不用的小程序中的openid是不同的就算小程序是同一个账户下的,而user_id在同
Token的意义与作用有些接口是可以公开访问的,比如平台首页的接口,有些接口是不能公开访问的,比如客户账户的操作。
对于接口来说,需要确定用户的身份,那么就涉及到用户登录,然而在API中不存在用户登录这个概念,我们是使用令牌来控制用户的身份,也就是将传统网站中用户登录的这个操作转换为用户来获取一个令牌,这个令牌代表着用户的身份,而且这个身份是分级别的,也就是登录就是获取令牌。
获取令牌的过程(登录)
携带令牌访问接口的过程
Token有三个层面的验证:
- 是否携带了合法的token
- 权限auth是否正确
- 是否在有效期内
现在的客户端是小程序,可以自己设计一套账号体系来获取令牌,但是小程序已经提供了一套微信认证体系,没有必要再小程序里面设计自己的账号密码。小程序可以为每个登录的用户生成一个code,code就是一个数字码,我们需要将这个码传向getToken接口,这个code码是一个去微信的服务器去换取用户的身份的标识,微信服务器在接收到code码之后会返回两个重要的信息openid和session_key,openid就是用户身份的标识,session_key的作用是在小程序中直接访问微信服务器拿到一个加密信息,如果要解密这个信息就需要用到session_key,这个信息包括unique_id 这个ID表示的也是用户唯一标识,与openid的区别是,openid是一个用户针对一个小程序有一个openid,也就是说一个用户在不用的小程序中的openid是不同的就算小程序是同一个账户下的,而user_id在同一个账号下注册的小程序,用户的unique_id都是相同的,也就是可以跨不用的应用(不同小程序的关联)。
openid的作用:
- 用户的唯一标识
- 一些功能性的作用比如微信支付
- openid需要在数据库存起来
不能把openid返回到小程序里去:
- 这是用户身份的敏感信息
- openid是固定不变的,没有失效期(因此需要令牌,让令牌有有效期,根据这个令牌去请求opendi从而间接的拿到openid)
为了减轻数据库的压力,我们可以借助缓存机制把令牌存在缓存中以减轻服务器的压力加快用户查询速度(注意openid是存在数据库中的)。