時(shí)間:2022-09-01 19:57:01 | 來源:網(wǎng)站運(yùn)營
時(shí)間:2022-09-01 19:57:01 來源:網(wǎng)站運(yùn)營
微信網(wǎng)頁掃碼登陸的原理是什么關(guān)注者151被瀏覽52,413class WeChatAuth(MyBaseHandler): """ 點(diǎn)擊后直接重定向到微信登錄界面 - 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)
對應(yīng) 上圖標(biāo)識2 中的代碼實(shí)現(xiàn):class WeChatAuthCallback(MyBaseHandler): """ 微信第三方認(rèn)證之后,開始將此用戶在本系統(tǒng)沉淀下來 - 用于微信服務(wù)器傳回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""" # 一個(gè)Open_id下面所有的id都是靠union來區(qū)分賬號 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() # 更新時(shí)間 else: await self.create_session(user) # 新增加一個(gè)session self.write('in authorized page') # self.redirect('/') # todo 重定向到登錄授權(quán)后的主頁 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, # 通過微信號登錄生成的一個(gè)唯一的用戶名,后面可以提供修改 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撞庫反向破解的隨機(jī)數(shù) # passwd=StringField() # 密碼,通過第三方登錄的默認(rèn)不設(shè)置 first_name=user_info.nickname, status=FieldDict.user_status_init, # 表示是可更改狀態(tài) 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 導(dǎo)入到未授權(quán)的頁面
客戶&案例
關(guān)于我們
微信公眾號
版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。