时间:2022-09-01 19:57:01 | 来源:网站运营
时间:2022-09-01 19:57:01 来源:网站运营
微信网页扫码登陆的原理是什么关注者151被浏览52,413class WeChatAuth(MyBaseHandler): """ 点击后直接重定向到微信登录界面 - wechat QR扫码登录,web端 - 直接重定向到微信的页面 """ def get(self): state = get_uuid1_key() # 生成唯一的码 wx_qr_param = dict( appid=wx_webapp.appid, # redirect_uri=wx_webapp.qr_auth_cb_url, redirect_uri='http://your.domain.com/wechat/wechat-auth-callback/', response_type='code', scope=wx_webapp.login_scope, state=state ) ##wechat_redirect wx_qr_url = 'https://open.weixin.qq.com/connect/qrconnect?%s#wechat_redirect' / % urllib.parse.urlencode(wx_qr_param) self.redirect(wx_qr_url)
对应 上图标识2 中的代码实现:class WeChatAuthCallback(MyBaseHandler): """ 微信第三方认证之后,开始将此用户在本系统沉淀下来 - 用于微信服务器传回code的值 - 此处要再请求获得access_token """ async def get(self): wx_code = self.get_argument('code', '') wx_state = self.get_argument('state', '') if wx_code == '': res = ConstData.msg_forbidden dlog.debug(res) self.write(res) return dlog.debug('wx_code:%s,wx_state:%s' % (wx_code, wx_state)) access_token_res = wx_webapp.get_auth_access_token(code=wx_code, state=wx_state) user_info = wx_webapp.get_auth_user_info(auth_access_token_res=access_token_res) """:type:WeChatUser""" # 微信返回的用户信息串 if user_info is None: res = ConstData.msg_forbidden dlog.debug(res) self.write(res) return wechat_user = await MisWeChatUser.objects.get(openid=user_info.openid, unionid=user_info.unionid) """:type:MisWeChatUser""" # 一个Open_id下面所有的id都是靠union来区分账号 if wechat_user is not None: user = await User.objects.get(user_id=wechat_user.user_id) assert user is not None if user.active: if await user.is_online(): await self.update_session() # 更新时间 else: await self.create_session(user) # 新增加一个session self.write('in authorized page') # self.redirect('/') # todo 重定向到登录授权后的主页 return # 如果不存在wechat备案信息,则需要备案wechat信息,而且新注册初始账号 default_new_user_id = 'u_' + get_uuid1_key() new_wechat_user = MisWeChatUser( openid=user_info.openid, nickname=user_info.nickname, unionid=user_info.unionid, # user_id=wx_webapp.appid + '_' + user_info.unionid, # 通过微信号登录生成的一个唯一的用户名,后面可以提供修改 user_id=default_new_user_id, appid=wx_webapp.appid ) new_wechat_user.set_default_rc_tag() # rand_salt = get_rand_salt() new_user = User( user_id=default_new_user_id, # salt=rand_salt, # 防止别人md5撞库反向破解的随机数 # passwd=StringField() # 密码,通过第三方登录的默认不设置 first_name=user_info.nickname, status=FieldDict.user_status_init, # 表示是可更改状态 active=False, ) new_user.set_default_rc_tag() await new_wechat_user.save() await new_user.save() self.write('in unauthorized page') # self.redirect(URL_ROOT) # todo 导入到未授权的页面