Azure B2C登录,react-web端实现,自定义登录页面ui

import React, { Component } from ‘react‘;
import Particles from ‘react-particles-js‘;
import { Form, Button } from ‘antd‘;
import { connect } from ‘react-redux‘;
import { setUserInfo } from ‘@/redux/actions/userInfo‘;
import ‘@/assets/css/login‘;
import * as Msal from ‘msal‘;

//获取当前域名‘
var url = ‘‘
function geturl() {
	const href = window.location.href
	console.log(href)
	var reg = new RegExp(/(\w+):\/\/([^/:]+)(:\d*)?/)
	let matchObj = href.match(reg)
	url = matchObj[0]
	// console.log(url,"--------url--------")
	// // this.locationUrl = url
};
geturl()
//B2C登录
var appConfig = {
	b2cScopes: ["https://XXX.onmschina.cn/api/demo.read"],//这些都要在B2C配置
	webApi: "http://localhost:5000/hello"
};
// configuration to initialize msal
const msalConfig = {
	auth: {
		clientId: "", //This is your client ID
		authority: "https://XXX.b2clogin.cn/XXX.onmschina.cn/B2C_1A_signup_signin_phone", //This is your tenant info
		validateAuthority: false,
	},
	cache: {
		cacheLocation: "localStorage",
		storeAuthStateInCookie: true
	}
};

// instantiate MSAL
const myMSALObj = new Msal.UserAgentApplication(msalConfig);
myMSALObj.handleRedirectCallback((error, response) => {
	console.log(response, error)
	if (response.idToken !== null) {
		localStorage.setItem(‘isLogin‘, ‘1‘);
		localStorage.setItem(‘menukey‘,[1])

		localStorage.setItem(‘token‘, response.idToken.rawIdToken);

		window.location.href = url+"/#/dashboard"
	}
	else {
		window.location.href = url+"/#/login"
	}

	// handle redirect response or error
});
// request to signin - returns an idToken
const loginRequest = {
	scopes: appConfig.b2cScopes
};

// request to acquire a token for resource access
const tokenRequest = {
	scopes: appConfig.b2cScopes
};

const FormItem = Form.Item;
class Login extends Component {
	state = { clientHeight: document.documentElement.clientHeight || document.body.clientHeight };
	constructor(props) {
		super(props);
		this.onResize = this.onResize.bind(this);
	}

	signIn() {
		myMSALObj.loginRedirect(appConfig.b2cScopes)
	}
	componentDidMount() {
		window.addEventListener(‘resize‘, this.onResize);
	}
	componentWillUnmount() {
		window.addEventListener(‘resize‘, this.onResize);
		// componentWillMount进行异步操作时且在callback中进行了setState操作时,需要在组件卸载时清除state
		this.setState = () => {
			return;
		};
	}
	onResize() {
		this.setState({ clientHeight: document.documentElement.clientHeight || document.body.clientHeight });
	}
	render() {
		const { getFieldDecorator } = this.props.form;
		return (
			<div className="container">
				<Particles
					height={this.state.clientHeight - 5 + ‘px‘}
					params={{
						particles: {
							line_linked: {
								color: "#77a3fc",
							},
							color: {
								value: "#77a3fc"
							},
							size: { value: 3 }
						},
						interactivity: {
							events: {
								onhover: { enable: true, mode: ‘repulse‘ }
							}
						}
					}}
				/>
				<div className="content1">
					<div className="logo1"><img src=‘‘ /></div>
					<div className="title1">欢迎使用ABB后台管理系统!</div>
					<Form className="login-form">

						<FormItem>
							<Button className="button1" type="danger" htmlType="submit" block onClick={this.signIn}>
								点击进入
							</Button>
							{/* <div style={{ color: ‘#999‘,paddingTop:‘10px‘,textAlign:‘center‘ }}>Tips : 输入任意用户名密码即可</div> */}
						</FormItem>
					</Form>
				</div>
			</div>
		);
	}
}

const mapStateToProps = state => state;
const mapDispatchToProps = dispatch => ({
	setUserInfo: data => {
		dispatch(setUserInfo(data));
	}
});
export default connect(
	mapStateToProps,
	mapDispatchToProps
)(Form.create()(Login));

原文地址:https://www.cnblogs.com/baiyq/p/12426347.html

时间: 2024-11-03 22:40:01

Azure B2C登录,react-web端实现,自定义登录页面ui的相关文章

Jeesite单点登录集成cas另加自定义登录验证

Jeesite单点登录集成Cas另加自定义登录验证 JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的 开源 Java EE快速开发平台. Cas主要是用来解决多应用之间统一登陆认证,无需用户在同一公司多应用之间重复登陆.例如阿里巴巴中淘宝.天猫,在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. Cas基础 服务端 服务端cas-server-webapp-4.0.0.war,服务器端程序一般不用我们完成,但需要做一点小小的修改,cas的服务

sharepoint 2013基于AD的Form表单登录(四)——开发自定义登录过程需要引用文件路径。

1.Microsoft.IdentityModel.dll 位置 %ProgramFiles%\ReferenceAssemblies\Windows Identity Foundation\v3.5 2.Microsoft.SharePoint.IdentityModel.dll位置 C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SharePoint.IdentityModel\v4.0_15.0.0.0__71e9bce111e94

如何给ss bash 写一个 WEB 端查看流量的页面

由于刚毕业的穷大学生,和朋友合租了一台服务器开了多个端口提供 ss 服务,懒得配置 ss-panel,就使用了 ss-bash 来监控不同端口的流量,但每次都要等上服务器才能看到流量使用情况,很麻烦,于是就写了个简单的页面来提供 WEB 访问,具体内容一起通过本文学习吧 由于刚毕业的穷大学生,和朋友合租了一台服务器开了多个端口提供 ss 服务,懒得配置 ss-panel,就使用了 ss-bash 来监控不同端口的流量,但每次都要等上服务器才能看到流量使用情况,很麻烦,于是就写了个简单的页面来提供

Spring Security 4 自定义登录表单 注解和XML例子(带源码)

上一篇文章: Spring Security 4 Hello World 基于注解 和 XML 例子 下一篇:Spring Security 4 退出 示例 原文地址:http://websystique.com/spring-security/spring-security-4-custom-login-form-annotation-example/ [已翻译文章,点击分类里面的spring security 4查看.] [ 翻译by 明明如月 QQ 605283073] 本文演示Sprin

FineReport中如何自定义登录界面

在登录平台时,不希望使用FR默认的内置登录界面,想通过自定义登录界面实现登录操作,内置登录界面如下图: 登录界面,获取到用户名和密码的值,发送到报表系统,报表服务带着这两个参数访问认证地址进行认证. 自定义登录界面 登录界面设置 自定义html登录页面:命名为login.html,并保存在%FR_HOME%\WebReport下,代码如下: <html>   <head>  <meta http-equiv="Content-Type" content=&

react网页版聊天|仿微信、微博web版|react+pc端仿微信实例

一.项目介绍 基于react+react-dom+react-router-dom+redux+react-redux+webpack2.0+nodejs等技术混合开发的仿微信web端聊天室reactWebChat项目,实现了聊天记录右键菜单.发送消息.表情(动图),图片.视频预览,浏览器截图粘贴发送等功能. 二.技术选型 MVVM框架:react / react-dom 状态管理:redux / react-redux 页面路由:react-router-dom 弹窗插件:wcPop 打包工具

android 访问web端与解析json,模拟用户登录

之前写过一个java web端的登录验证,最后返回一个json字符串. 字符串格式如下: {"appmsg":"账号或密码错误","appcode":0,"_default_boolean_a":false} 今天就结合着Android来写一个简单的登录. 注意: 在AndroidManifest.xml里给访问网络的权限 在写具体路径时,一定要注意不要用localhost,因为识别不了.一定要写具体的IP 步骤如下: 1.先

10行代码搞定移动web端自定义tap事件

发发牢骚 移动web端里摸爬滚打这么久踩了不少坑,有一定移动web端经验的同学一定被click困扰过.我也不列外.一路走来被虐的不行,fastclick.touchend.iscroll什么的都用过,各有优劣,都不能一步到位.最后实在是被逼无奈,翻阅了不少资料,自定义了一个tap. 效果预览 废话不多说先上效果 移动端预览 一探真假 真的只有10行 插件是基于jQuery的,上代码. //自定义tap $(document).on("touchstart", function(e) {

Teamcenter Web 端自动登录 (SSO)

原生的机制 Teamcenter 2007 的web 端, 本身提供了SSO 的机制. 原生的机制使用 Java Applet 的方式获取浏览器端所在的机器登录的用户名,使用这个用户名进行登录, 而无需密码. 架构设计如下: 不需要安装插件的验证 使用以上方式进行验证,在客户端的话就必须要安装 JRE. 插件安装本身就是一个扰人的动作, 而且对于各浏览器来说, 相关的插件安装机制又有不同. 比如对于目前的Chrome 的版本来说, 默认状况下, 不过你本地是否有安装JRE , 都会提示你安装最新

CAS自定义登录页面

首先,在我们的子系统中应该有一个登录页面,通过输入用户名和密码提交至cas认证中心.不过前提是先要获取到 login tickt id. 也就是说当用户第一次进入子系统的登录页面时,在该页面中会通过js跳转到 cas/login 中的获取login ticket. 在 cas/login 的 flow 中先会判断请求的参数中是否包含了 get-lt 的参数.  (1) 在cas的 login flow 中加入 ProvideLoginTicketAction 的流,主要用于判断该请求是否是来获取