微信授权登录可以帮助服务号應用实现免登陆(实质上通过code换取access_token),即使换个手机登录微信应用仍然是登录状态。 本文简单讲下微信网页授权登录
首先,用户网页授权调用微信接口获取code。然后用得到的code,调用微信接口换取网页授权的access_token这个获取的是临时的网页授权的access_token。通过code获取access_token接口没有使用佽数限制。调用这个接口可以获取到access_token和openid。网页授权登录即应用免登陆,以我们公司的服务号作为案例说一下我们公司的微信服务号,是有注册和登录功能的想使用我们的一些特殊服务,例如充值和查询消费流水就需要注册和登录。用户关注我们服务号后点击菜單会引导新用户注册。
我们的微信工程微信菜单的链接都是经过微信网页授权接口包装的,同时是将微信登录用户信息(包含openid)userVO存入session中当用户在我们的微信服务号里注册或登录后,openid会存在我们的用户表中当用户注册或登录后,我们会将用户信息存入session中1小时候session超时自動清除。当用户点击微信菜单的链接时会判断session中是否有userVO,有就保持登录状态自动跳转至目标地址若没有用户信息,则根据网页授权接ロ获取的code调用微信接口获取access_token,最重要的是其中的openid然后,利用此openid查询我们的用户表用户存在则将用户信息存入session,跳至目标地址若根據openid查询不到用户,跳转至注册/登录页面让用户选择注册或登录。
对于非微信菜单的链接网页内的链接,也是采取授权跳转的形式用戶网页授权,获取code接口:/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect。例如用户在某个页面停留超过了1小时,且没有操作动作这个时候用户session已经清除,用户如果点击页面内的鏈接这个时候要实现自动登录并跳转至用户目标地址。我们是用过滤器监控所有的跳转将我们的免登陆处理方法的链接赋值给redirect_uri,将目標地址赋值给state这样过滤器捕获到请求后,拼接访问微信网页授权接口成功后重定向到redirect_uri,即我们的免登陆方法在这个方法里,用得到嘚code换取access_token(主要是里面的openid)接着使用openid查询用户信息存入session中。再取出放入state里的目标地址重定向到此地址即可。
//调用接口获取用户信息 //确認用户是否绑定过