基于.NetCore+React单点登录系统

对于有多个应用系统的企业来说,每一个应用系统都有自己的用户体系,这就造成用户在切换不同应用系统时,就要多次输入账号密码,导致体验非常不好,也造成使用上非常不便。

针对这个问题,我们就可以采用单点登录的机制,只需用户登录一次,就可以实现切换到不同的应用系统,不需重新登录验证。

下面给大家推荐一套单点登录开源项目。

项目简介

这是基于.NetCore 3.1、React开发的开源项目,支持账号密码、手机短信、第三方登录,采用前后端分离架构。

该项目已较长未更新,但作为学习、参考,还是不错的。

技术架构

1、跨平台:这是基于.NetCore开发的系统,可以部署在Docker,Windows,Linux,Mac;

2、后端基于.Net core3.1 + EF Core;

4、数据库支持:MySQL;

5、缓存组件:Redis;

5、前端:React。

项目结构

图片

系统功能

1、基础功能:用户注册、登录、忘记密码、第三方平台登录;

2、第三方支持平台:微信、钉钉。

部分功能截图

系统界面

图片

登录

图片

注册

图片

找回密码

图片

项目地址

http://github.com/fuluteam/fulusso

更多开源项目请查看:一个专注推荐优秀.Net开源项目的榜单

- End -

文章首发于公众号【编程乐趣】,欢迎大家关注。
图片

本文转载于网络 如有侵权请联系删除

相关文章

  • JDBC

    JDBC通过JDBC连接MySQL数据库前提条件1、jar包:连接驱动包【mysql-connector-java-5.1.47.jar】 2、url:确定连接的数据库所在网络地址和对应操作哪一个数据库,由协议名+子协议名+数据源名构成,即 jdbc:mysql://主机地址:端口号/数据库名 【例】jdbc:mysql://localhost:3306/islu 3、user:用户名【root】 4、password:密码【root】复制步骤1、加载驱动 2、准备必要的连接参数 3、获取数据库连接 4、关闭资源!!!复制案例代码【测试连接】packageJDBC; importjava.sql.Connection; importjava.sql.DriverManager; importjava.sql.SQLException; publicclassDemo1{ /** *1、加载驱动 *2、准备必要的连接参数 *3、获取数据库连接 *4、关闭资源!!! */ publicstaticvoidmain(String[]args){ Connectionconnec

  • 基于yolov5的工业缺陷检测方案

    作者:limzero,西安交通大学,Datawhale原创作者比赛介绍工业缺陷检测是当前深度学习落地的热门项目,其中瓷砖生产过程中的“质量检测环节”需要检测出瓷砖表面的瑕疵,目前比较依赖于人工,效果和效率都层次不齐。最近天池上线的广东工业赛事针对瓷砖表面瑕疵进行智能检测,要求选手们相应的算法,尽可能快与准确的给出瓷砖疵点具体的位置和类别,主要考察疵点的定位和分类能力。在本篇文章中,主要为大家介绍选择yolov5作为基线的方案,供大家参考。基于yolov5的方案线上结果:切成640x640滑动窗口预测,耗时<1.5h,平均一张图<3s!线上50.长边resize到6400预测,平均一张图耗时:0.6s.线上55+大家们都在疯狂卷mmdet,毕竟two-stage为王,但是如果没有算力可以考虑下yolov5。而且考虑到速度和精度的均衡(复赛要求<3s),如果使用two-stage的单图大尺度预测,个人感觉上限有限,而且比赛最后都是拼细节。所以肯定会朝着切图(特别是测试时切图)的方向发展。如果two-stage妄图切图到小块然后预测,时间限制肯定会劝退大部分two-stag

  • 主观的真相与戏剧化的悲情

    真相何来?当我们说真相的时候,可能大家会首先联想到下面这幅图:但其实,现实中的真相,很少会这么简单、直观。 不同角度的照片能够揭露一些东西,但就算是360度环形照片,哪怕是3D打印的1:1立体模型,附带方圆三公里全部实景,能够展现的,也仅仅是一个瞬间。人类社会的现实事件,不仅涉及的主体多样,而且基本上都是动态变化的,罗生门、多主线、阴差阳错等等被电影反复使用的拍摄手段,在现实中不过就是低幼的模型玩具,相较于客观的真实,差距又岂止十万八千里。 在接触现实事件时,无论是作为局中人还是旁观者,人们恰恰没有作为电影观众的上帝视角,而只能从自己的角度获得一鳞半爪的信息而已。 看电影未必人人都想写影评,可在生活中碰到了事儿,却是人人都爱发议论,如果牵涉自身,不仅要发议论,还得做判断。当面对这纷繁复杂的环境,仅掌握少得可怜的信息时,人们如何做出判断呢?无论现实事物的实际复杂程度如何,当我们获取信息时,实际接受的,其实已经不是具象的事物本身,而是对它的某些抽象描述——换言之,也就是事物的某些特征。这些“特征”经由我们头脑中的思维模型“计算”一番,最终得出“预测结果”,也就是最终的判断结论。其全过程可以

  • 前端基础-HTML表格

    表格导入:我们在博学谷上面可以看到各自班级的课程表表格图示1表格图示2表格图示3这样的页面就会用到表格。表格在网站中应用常用场景通常是金融类的网站,数据做统计,后台管理系统等1.相关标签画图说明,table是一个表格的模块,里面有行,光有行不行,里面要有列,在html中不叫列,叫单元格,再有很多行,就组成了表格-------》table标签包含行tr—》再包含单元格td表格:<table></table>行:<tr></tr>单元格:<td></td>每列的标题:<th></th>表格标题:<caption></caption>小案例:小案例图示<!--表格的区域,border属性代表边框的意思--> <tableborder="1"> <!--行--> <tr> <!--单元格--> <td>姓名</td> <td>性别</td> &

  • Python数据类型详解-字典#学习猿地

    ###数据类型详解-字典>字典也是一种数据的集合,由键值对组成的数据集合,字典中的键不能重复>>字典中的键必须是不可变的数据类型,常用的键主要是:字符串,整型。。。###字典的定义+字典可以通过将以逗号分隔的`键:值`对列表包含于花括号之内来创建字典+也可以通过[`dict`](https://docs.python.org/zh-cn/3.7/library/stdtypes.html#dict)构造器来创建 `{'jack':4098,'sjoerd':4127}`或`{4098:'jack',4127:'sjoerd'}````python#1。使用{}定义vardict={'a':1,'b':2,'c':2}#2。使用dict(key=value,key=value)函数进行定义vardict=dict(name='zhangsan',sex='男',age=22)#3。数据类型的转

  • IT 相关常见英文缩写一览

    文档篇doc全称DOCument。MicrosoftOfficeWord2007之前版本使用的文档名后缀。docx全称officeopenXmlDOCument,MicrosoftOfficeWord2007及之后版本使用的文档名后缀。doc后跟x表示文档是基于XML构建的。ppt全称PowerPoinT。MicrosoftOfficePowerPoint2007之前版本使用的幻灯片演示文稿名后缀。pptx全称officeopenXmlPowerPoinT,MicrosoftOfficePowerPoint2007及之后版本使用的幻灯片演示文稿名后缀。ppt后跟x表示文档是基于XML构建的。xls全称eXceLSpreadsheet。MicrosoftOfficeExcel2007之前版本使用的电子表格名后缀。xlsx全称officeopenXmleXceLSpreadsheet。MicrosoftOfficeExcel2007及之后版本使用的电子表格名后缀。xls后跟x表示文档是基于XML构建的。ooxml全称OfficeOpenXML,是微软公司为Office2007产品开发的技术

  • Python入门基础教程-列表与字符串高阶操作

    作者:一叶介绍:放不下灵魂的搬砖者全文共1779字,阅读全文需7分钟Python版本3.8.0,开发工具:Pycharm其实,本小节应该出现在Python进阶教程中,但对于想快速入门Python的读者中,本小节内容又必须得了解,所以,我在删减了部分进阶内容(主要是Numpy与Pandas的一些操作)后,补充了本小节内容 在Python六大数据类型中,字符与列表是最常用的两大类型,且在使用过程中,存在许多实用小技巧,方便更快速的进行数据处理,本小节主要是字符和列表的高阶操作。01—Python字符串字符串切片在常规字符操作中,通过下标进行字符处理,在Python中,可以通过切片的方式进行字符处理1#定义字符串 2my_str='woshizhiqiuxiaomeng,wozhengzaixuexiPython' 3#输出第一个字符,即下标为0 4print(my_str[0]) 5#输出最后一个字符,即下标为len(my_str)-1 6print(my_str[len(my_str)-1]) 7#同上,输出最后一个字符 8print(my_str[-1]) 9 10

  • web前端如何准备面试工作??

    其实我也不知道要怎么准备面试工作,我一直在准备,时刻准备着面试。既然不知道要怎么准备,那我就看看书吧,顺便推荐你看看。我要推荐一本书,《javascript忍者秘籍2》,每次阅读都有不一样的收获。之前推荐这本书,只是简单的介绍了里面大概的目录结构。这一次我想对于每一个章节里我不懂的地方,或者说我认为重要的地方说一说。关于这些知识点网上百度搜一大堆,比我写的好的多了去了,但是我还是要写,别人写的终究是别人的,我自己写了,记住了才是我的。同时也是自己对知识的二次记忆。首先声明,文章里面所有的图片内容都来自书籍中,一千个读者就有一千个哈利波特,每个人的理解都不一样。我建议你去读读这本书,如果有不对的地方请指出JavaScript应用能在很多环境中执行。但是JavaScript最初的运行环境是浏览器环境,而其他运行环境也是借鉴于浏览器环境。我们需要了解javaScript工作核心原理和浏览器提供的核心api我们所接触的大部分东西都有他的生命周期,比我们前端三大框架中vue和react还一个我没有接触过,就不说了,逃都有一个从开始到结束的过程。我们的前端页面也是一样的,只是我们平时忽略他罢了。当

  • 性能百万/s:腾讯轻量级全局流控方案详解

    作者莫家文,腾讯事务型开发工程师商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。WeTest导读全新的全局流控实现方案,既解决了目前流控的实现难点,同时保证运行稳定且流控准确的前提下,实现更简单,部署成本更低,容灾能力更强。该方案组件化之后,可以推广到别的有需要的部门使用,只需简单的接入和部署即可获得全局流控的能力。一背景流控作为容灾体系中必不可少的一环,在请求量超过系统容量的时候,通过拒绝超量请求的方式,防止服务接口的雪崩和系统挂掉。目前部门只具备单机流控的能力,随着业务的增长和系统复杂度的增加,单机流控越来越不能满足需要,升级流控能力日趋重要。流控分类升级流控之前,先简单了解不同流控方式的优缺点:对比可知,全局流控能能弥补单机流控的缺点,而动态流控又是在全局流控的基础上做更精细化的流控。现有方案分析目前全局流控方案主要需要解决两个实现问题:1、全局计数器使用何种存储全局计数器存储可以使用redis,也可以使用ckv。分布式流控很关键一点是将流控服务做成原子化。而做流控需要记录两个信息,计数和计时。比如全局流控阈值设置了5w/s的值,计数器记录了当前的请求数(计数),在

  • AWE 2017逛展第一天,智能家居厂商逐步打破壁垒

    AWE2017第一天完美落幕,根据现场情况,镁客君总结了那么几个小点。今天,为期三天的AWE2017(2017年上海中国家电及消费电子博览会)正式开展。会上,镁客君用自己的这双眼帮大家好好的将各个展馆逛了一遍,其中所有的智能家电看得可谓是眼花缭乱。不过,在看着这么多展台之后,镁客君也作出了几点小结:智能家居是理所当然的大势AWE2017总共设置了8个展馆,其中E2馆为科技公园&智能家居馆,是此次展会为智能家居特地开辟的一个展馆。一直以来,AWE都被看做是家居行业的风向标,而从这件事情中,我们看到了其对“智能家居”的重视,由此引发连锁效应,相信在未来的一段时间内,“智能家居”将是家电行业的一个大趋势。此外,不仅仅是E2展馆,在其他的展馆内,我们也看到了许多“智能家居”的影子存在,像N1展馆的海尔U+智慧生活,W1展馆的美的、格兰仕、海信,W2展馆的京东、创维、华捷艾米,W4展馆的科沃斯、福玛特、小狗吸尘器,以及W5展馆的格力等等,无一不在像人们展示智能的家居生活。科技公司、传统家电制造商齐头并进,再加上行业风向标的指引,“智能家居”想不受到行业的关注都不行啊!做智能家居,各有各的

  • 工信部发布《区块链数据格式规范》标准

    近日,在由工业和信息化部信息化和软件服务业司指导、工业和信息化部中国电子技术标准化研究院主办的“中国区块链技术和产业发展论坛第二届开发大会”上,《区块链数据格式规范》标准正式发布,该标准的发布有助于为区块链系统的数据结构设计提供参考,为区块链行业应用提供统一的数据标准,对我国区块链标准建设具有重要意义。公众号后台回复:“区块链”,获取本文报告。

  • iOS开发之线程间的MachPort通信与子线程中的Notification转发

    如题,今天的博客我们就来记录一下iOS开发中使用MachPort来实现线程间的通信,然后使用该知识点来转发子线程中所发出的Notification。简单的说,MachPort的工作方式其实是将NSMachPort的对象添加到一个线程所对应的RunLoop中,并给NSMachPort对象设置相应的代理。在其他线程中调用该MachPort对象发消息时会在MachPort所关联的线程中执行相关的代理方法。 下方内容我们先来看一下MachPort的工作方式,然后再看一下在子线程中发Notification的效果,最后我们在通过MachPort来讲子线程中的发出的通知转发到主线程中进行处理。   一、MachPort的使用方式 接下来我们就通过一个小的示例来简单的看一下MachPort的使用方式。首先我们声明了一个NSMachPort的成员属性handelEventMachPort,该变量实例化后指定其NSMachPortDelegate的对象为当前类。然后将handelEventMachPort添加到主线程中,具体代码如下所示。      搞定NSMachPort对象后,接

  • Tomcat 日志切割

    1.安装定时插件 yuminstall-y crontab 2.切割脚本(clear.sh) gs_path="/root/apache-tomcat-9.0.53/logs"#日志所在路径d=`date+%Y-%m-%d` cp$logs_path/catalina.out$logs_path/catalina.${d}.out>$logs_path/catalina.out;find$logs_path-name"catalina.*.out"-execrm-rf{}\;find$logs_path-name"localhost.*.log"-execrm-rf{}\;find$logs_path-name"localhost_access_log.*.txt"-execrm-rf{}\;find$logs_path-name"catalina.*.log"-execrm-rf{}\;find$logs_path-name"manager.*.log"-execrm-rf{}\;find$logs_path-name"host-manager.*.log"-exec

  • 基于seajs的模块化编程

    前段时间由于项目需求把seajs加入了项目中,越用越喜欢,感叹玉伯大神这头巨牛的创作能力。kissy也是玉伯大神的作品,就是太强大,有点臃肿,适合大型项目开发。 seajs的github地址:https://github.com/seajs/seajs,想研究的进门右拐。 1.seajs.config seajs.config({//设置根目录地址 base:'url', //设置路径,方便跨目录调用 paths:{ 'arale':'https://a.alipayobjects.com/arale', 'jquery':'https://a.alipayobjects.com/jquery' }, //设置别名,方便调用 alias:{ 'class':'arale/class/1.0.0/class', 'jquery':'jquery/jquery/1.10.1/jquery' } })复制 2.加载模块:   加载a和b模块后执行回调函数func,seajs.use(['a','b'],func); 3.define define(id,deps,func

  • 对数组排序后,获取排序前元素索引

    对数组排序后,获取排序前元素索引 写在前面 最近基本都在弄实验室的事情,自己设计了两个算法,有大把的数据需要跑,大把的模型需要渲染。。。 在设计的算法中,有一个需求是,对一个double数组OriArray进行排序,排序之后记为SortedArray,现在需要获取SortedArray数组中的每个元素在原始数组OriArray中的索引。 这个需求如果在OC中实现的话蛮简单的,把<原索引,数组元素>作为键值对放入某个字典,按照数组元素对字典进行排序,然后要获取排序后的数组在原始情况下的索引,只需直接访问其key就可以了。但是C++中没有直接的这样的数据结构,因此我们可以自己构造一个。 代码实现 按照上文中的思路,构造一个<原索引,数组元素>的数据结构,如下 structnode { doubledata; intNo; }; 复制 排序我们直接使用系统中自带的快排算法。其函数原型如下 qsort(array,num_of_data_in_array,sizeof(array[0]),comp) 复制 其中第一个参数为数组名,第二个参数为数组中元素个数,第三个参数为

  • rsync同步SQLite3文件API返回旧数据

    问题描述 EFCorecannotgetnewvalueindocker,ifusersyncreplacesqlitefile 基于.NET6开发一个查询SQLite的API,使用Docker进行部署,通过挂载的方式来访问数据库文件:dockerrun-d--nameddocker-p9100:80-v/mnt/c/Users/chiwenjun/Desktop/pdemo/docs/:/home/db/ddocker使用rsync命令从其他目录同步文件到/mnt/c/Users/chiwenjun/Desktop/pdemo/docs/目录下,API依然返回旧数据。 原因解释 查询SQLite数据库时,数据库中符合查询条件的数据会以页缓存(和连接相关)的形式存放到内存中,减少后续查询的磁盘I/O操作; 修改数据库文件会导致页缓存失效; rsync命令会导致文件inode值发生改变,cp命令不会; .NET串默认开启了数据库连接池,使用rsync命令同步文件不会使页缓存失效,所以应用查询依然走页缓存,也就无法感知到数据变化,连接字符串中禁用连接池,可解决该问题。 本地在IDE中直接运

  • 自己总结 C++ 代码规范

    1.编写原则,代码尽量简单,简洁,高效,自己写的代码让自己和别人容易看懂 2.命名: a. 类的成员变量加前缀m_(表示member)。 常量全用大写的字母,用下划线分割单词(constintMAX_LENGTH=100;) 循环变量和简单变量采用简单小写字符串即可。例如,inti;  指针变量用p打头,例如void*pBuffer; b.变量,函数,文件命名应该具有描述性,最好采用英文单词或其组合 c.类名和函数名用大写字母开头的单词组合而成。 3.缩进:统一使用tab,不用空格 4.注释: a.程序块的注释常采用“/*…*/”,行注释一般采用“//…” b.尽量不要使用注释 c.无用代码注释,确定无用后及时删除 5.代码编写经验: a.不要引入新的warning代码 b.函数参数中尽量使用const,避免意外的改动 C.变量定义后必须初始化 d.一行代码只做一件事情。长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首 if((veryVeryLongWidth>veryVeryLongHeight) ||(veryVeryLongWidth<veryVeryL

  • Spring 学习笔记

    Spring 一.SpringFramework Spring是一个轻量级框架,目的是为了让对象之间的耦合性降低(解耦),方便后期代码的维护; Spring本质上就是一个Bean工厂,应用程序中所有的对象生命周期都是由Spring来管理的; 二.Spring中对象的注入方式 set注入(实体类中的属性必须有set方法) <beanname="user"class="com.ztkj.entity.User"> <propertyname="userId"value="1"></property> <propertyname="userName"value="小溪"></property> <propertyname="userPass"value="123"></property> </bean> 复制 构造方法注入(实体类中必须有带参数的构造方法) <beanname="user"class="com.ztkj.entity.User"> <const

  • NYOJ题目216 A problem is easy

    //AC 心得:思考题目要求,寻找好合适的条件。 #include<stdio.h>intmain(){ intT; scanf("%d",&T); while(T--) { intn,i; inta=0; scanf("%d",&n); for(i=1;(i+1)*(i+1)<=n+1;i++)//数学平方数理想化 { if((n+1)%(i+1)==0)//i*j+i+j=N经过观察,可以变形为i*j+i+j+1=N+1,也就是说,可以进一步变形为(i+1)*(j+1)=N+1; a=a+1;//由于要满足i<=j; } printf("%d\n",a); } return0;}

  • 创业之前你需要了解的九个真相

    创业之前你需要了解的九个真相 成功的创业者总是喜欢到处分享经验,创业失败的人却躲得远远的不敢让人知道,久而久之容易让大家犯了“幸存者偏差”,可实际上失败的公司多如过江之鲫!很多年轻人贸贸然上了战场,拿着市面上的创业教材就一头扎进了创业堆里,殊不知创业是一条九死一生的荆棘路。就像电影《死神来了》,一直都在逃离死神的追随。关于初始,我们是懵懂的;关于过程,我们是关心的;关于结果,恰恰是我们所最为顾虑的。 本来创业是一个很简单的选择题,很容易选出正确的答案,但后来发现真的很多人会选择错,才知道原来大部分人连创业的基本观念都没有,也就是说不懂江湖没有经验只有一腔热血,血仍未冷但事已败。 其中很大原因,是不知道自己“在”做什么、不知道自己“该”做什么、不知道什么是最“重要的”,接着一次又一次的选择“错误”。俗话说10个创业有9个失败,真的去探究原因,很多其实一开始就是被死神盯上,因为基本的创业概念都没有、不知道自己在做什么,只是做自己“想”做和“会”做的事情。所以说,创业是一种突破和学习,抓紧重要的事,其实逃离死神的机率会大很多。 创业想要成功,就是要不停的找到答案,让“不知道”变成“知道”,当

  • 牛Bplus--时间都是用飞的,212--七天--321--跟个项目吧。也许又能升一级

    XXX

相关推荐

推荐阅读