网站首页 > 技术文章 正文
前提:
前段时间写了个通过web页面企业微信授权登录网页。
使用企业微信登录个人网站之:三、获取access_token及登录信息
但是后来有一次部门聚餐,突然临时要更新代码到外网服务器去,当时我们没有准备电脑,然后想要通过手机登录vpn进行网站更新,然后就发现悲剧了。
1、手机登录竟然也需要二维码,我们需要2个手机对着扫描才行;
2、然后是页面匹配没做好,手机登录时候二维码展示不全;
导致我们最后只能手机登录远程电脑桌面,然后再打开web浏览器操作。可想而知那个字体得多小,操作得多麻烦。
所以这几天看了下企业微信的api文档,并对网站进行了调整。
下面这是效果图:
通过企业微信里面点击链接后会自动跳转到对应的网站,不需要进行扫描二维码等操作,自动识别当前用户。
修改内容:
这里就不从最开始怎么搭建企业微信授权方面说起了,那部分前面文章已经说过了。
1、企业微信管理端部分:
添加自定义菜单和需要跳转法人网站,可以每次很方便的直接点击进入网站,避免了手机每次要记录、输入网站地址的麻烦。
效果图:
在企业微信的工作台对应应用下面会出现一个菜单框,点击可以直接进入企业微信管理端刚刚配置的链接。
2、后端部分:
我这里没有在访问前端页面时候通过判断是否是手机访问来做页面跳转,我后端是用python写的,所以我直接在后端加了个装饰器。
过程:
在访问登录页面前,直接先判断是不是手机用户,是就直接去企业微信进行用户授权验证,授权成功就直接进入主页,从而跳过登录页面。
实现:
#判断访问类型是不是手机
def ISMobilePhone(request):
MobilePhone = re.compile('Android|webOS|iPhone|iPod|BlackBerry')
ISPhone = MobilePhone.findall(request.META.get('HTTP_USER_AGENT'))
return ISPhone
##装饰器判断用户是否登录
def checklogin(func):
def wrapper(*args, **kwargs):
request = args[0]
user_dict = request.session.get('is_login',None)
#没登陆
if not user_dict:
#确定访问类型是不是手机
ISPhone = ISMobilePhone(request)
if ISPhone:
##是手机,访问后端手机登录方法
return redirect('/phone_login/')
##不是手机,访问后端网页登录方法
return redirect('/login/')
#已登录,什么也不操作,正常结束装饰器
return func(*args, **kwargs)
return wrapper
#去企业微信请求code信息,并重定向新的访问页面
def phone_login(request):
corpid = "XXXX" ##公司id
return redirect('https://open.weixin.qq.com/connect/oauth2/authorize?appid={corpid}&redirect_uri=http://XXXXX/wx_login&respo
nse_type=code&scope=snsapi_base&state=reg#wechat_redirect'.format(corpid=corpid))
@checklogin
def index(request):
user_dict = request.session.get('is_login',None)
return render_to_response('index.html', {'username':user_dict['name']})
def wx_login(request):
pass ##这里不再写了,以前写过了。这一段是通过code判断用户授权方面是否正常,授权正常就直接返回主页。
使用手机企业微信点击页面登录和扫描二维码有点不同,手机企业微信操作可以直接使用wechat_redirect参数来带上用户身份信息,所以少了页面登陆时候手机点确认登录的过程。这里只需要获取code来验证用户是有权限进行相关应用操作的用户。
代码运行过程:
1、手机用户访问index.html,在后端想要访问index函数;
2、装饰器checklogin在访问前先进行相关操作;
3、checklogin函数判断到访问用户并没有登录,并且是手机用户;
4、跳转到访问phone_login; ##return redirect('/phone_login/')
5、phone_login直接去企业微信官网请求code信息,并重定向的回调链接地址为wx_login ##redirect_uri
6、wx_login函数这里就不再写了,以前的文档已经写过了,这段是通过前面企业微信返回的code进行授权验证,授权正常就直接返回主页页面。
企业微信官方文档:
企业如果需要员工在跳转到企业网页时带上员工的身份信息,需构造如下的链接:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&agentid=AGENTID&state=STATE#wechat_redirect
员工点击后,页面将跳转至 redirect_uri?code=CODE&state=STATE,企业可根据code参数获得员工的userid。
上面企业微信部分官方链接:https://qydev.weixin.qq.com/wiki/index.php?title=OAuth%E9%AA%8C%E8%AF%81%E6%8E%A5%E5%8F%A3
到此功能就算完成了。使用手机尝试访问网站也正常进入成功。
猜你喜欢
- 2024-11-24 测试开发基础,教你做一个完整功能的Web平台之登录认证
- 2024-11-24 iframe嵌入页面实现免登录
- 2024-11-24 用Java三层架构写一个登录案例
- 2024-11-24 带你掌握springboot集成SpringSecurity认证授权
- 2024-11-24 .NET云原生应用实践(五):使用Blazor WebAssembly实现前端页面
- 2024-11-24 我觉得再没有登录页卷的啦,简单需求非要惊艳效果
- 2024-11-24 一步步使用SpringBoot实现登录和用户管理功能源码分享
- 2024-11-24 登录页漂亮不漂亮,来走两步。
- 2024-11-24 再来一波登录页,就这个样被征服了。
- 2024-11-24 自定义 WordPress 登录以回复链接及文字
你 发表评论:
欢迎- 07-10Oracle 与 Google Cloud 携手大幅扩展多云服务
- 07-10分享收藏的 oracle 11.2.0.4各平台的下载地址
- 07-10Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务
- 07-10Oracle Database@Azure 推进到南美等新区域并增加了新服务
- 07-10Oracle宣布推出 Oracle Database@AWS 的有限预览版
- 07-10Oracle与Nextcloud合作,推出主权云上的安全协作平台
- 07-10NodeRED魔改版连接MsSql、PostgreSQL、MySQL、OracleDB存储无忧
- 07-10对于企业数据云备份,“多备份”承诺的是成本更低,管理更高效#36氪开放日深圳站#
- 601℃几个Oracle空值处理函数 oracle处理null值的函数
- 593℃Oracle分析函数之Lag和Lead()使用
- 581℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 578℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 573℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 566℃【数据统计分析】详解Oracle分组函数之CUBE
- 552℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 547℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- Oracle 与 Google Cloud 携手大幅扩展多云服务
- 分享收藏的 oracle 11.2.0.4各平台的下载地址
- Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务
- Oracle Database@Azure 推进到南美等新区域并增加了新服务
- Oracle宣布推出 Oracle Database@AWS 的有限预览版
- Oracle与Nextcloud合作,推出主权云上的安全协作平台
- NodeRED魔改版连接MsSql、PostgreSQL、MySQL、OracleDB存储无忧
- 对于企业数据云备份,“多备份”承诺的是成本更低,管理更高效#36氪开放日深圳站#
- 解读丨《归档文件整理规则》— 电子文件元数据存储
- Data Guard跳归档恢复的实践(dataguard failover)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)