建设部网人事考试网站/网页设计软件
react 身份证校验校验
本文最初出现在OKTA博客上 。 感谢您支持使SitePoint成为可能的合作伙伴。
根据JAXenter的说法, React已Swift成为最受欢迎的前端Web框架之一,并且仅次于普通的旧HTML5。 因此, 开发人员正在学习它 ,而雇主正在要求它也就不足为奇了 。
在本教程中,您将从一个非常简单的React应用程序开始,该应用程序具有几个页面和内置的一些路由,并使用Okta的Sign-In Widget添加身份验证。 Sign-In Widget是一个可嵌入的Javascript Widget,它使开发人员可以在React应用程序中以最小的努力使用Okta的安全,可扩展的体系结构。 让我们开始吧!
获取简单的React Seed项目
首先克隆简单的React Seed项目。
git clone https://github.com/leebrandt/simple-react-seed.git okta-react-widget-sample
cd okta-react-widget-sample
添加Okta登录小部件
使用npm安装Okta登录小部件 。
npm install @okta/okta-signin-widget@2.3.0 --save
这会将Okta登录小部件代码添加到您的node_modules
文件夹中。 我们将使用2.3.0版的“登录小部件”。
然后从Okta CDN在index.html
文件中添加小部件的样式。 将这些行添加到<head>
标记内:
<link
href="https://ok1static.oktacdn.com/assets/js/sdk/okta-signin-widget/2.3.0/css/okta-sign-in.min.css"
type="text/css"
rel="stylesheet"/>
<!-- Theme file: Customize or replace this file if you want to override our default styles -->
<link
href="https://ok1static.oktacdn.com/assets/js/sdk/okta-signin-widget/2.3.0/css/okta-theme.css"
type="text/css"
rel="stylesheet"/>
LoginPage组件
首先,在./src/components
文件夹中创建一个名为auth
的文件夹,然后在LoginPage
组件所在的位置创建一个名为LoginPage.js
的文件。
从最基本的组件开始:
import React from 'react';
export default class LoginPage extends React.Component{
render(){
return(
<div>Login Page</div>
);
}
}
这个小组件并没有做什么用,但是至少您现在有了一个将LoginPage
添加到路由中的句柄。 因此,在./src/app.js
文件中,您将在顶部导入组件:
import LoginPage from './components/auth/LoginPage';
然后将路径添加到主路径(路径为“ /”的路径)内
<Route path="/login" component={LoginPage}/>
在Okta中添加OpenID Connect应用程序
为了使用Okta作为OpenID Connect提供程序进行身份验证,您需要在Okta开发人员控制台中设置一个应用程序。
如果您没有Okta开发者帐户, 请创建一个 ! 登录后,单击顶部导航栏中的“ 应用程序 ”,然后单击“ 添加应用程序” 。 选择SPA作为平台,然后单击Next。 将重定向URI更改为http://localhost:3000
,然后单击“完成”。 将使用以下设置创建该应用程序:
现在,您已经在Okta中创建了一个应用程序,您可以设置该小部件以与您的新应用程序对话!
将小部件添加到您的组件
import React from 'react';
import OktaSignIn from '@okta/okta-signin-widget';
export default class LoginPage extends React.Component{
constructor(){
super();
this.widget = new OktaSignIn({
baseUrl: 'https://{oktaOrgUrl}',
clientId: '{clientId}',
redirectUri: 'http://localhost:3000',
authParams: {
responseType: 'id_token'
}
});
}
render(){
return(
<div>Login Page</div>
);
}
}
复制从应用程序的设置页面生成的客户端ID,并将其粘贴到{clientId}
。 确保您还用Okta组织URL替换了{oktaOrgUrl}
,可以通过返回开发者控制台中的“仪表板”主页面找到该URL。 通常情况如下: https://dev-12345.oktapreview.com
: https://dev-12345.oktapreview.com
。
到目前为止,您已经从之前安装的Okta登录小部件 npm
模块导入了OktaSignIn
函数。 接下来,在组件的构造函数中,使用应用程序的配置初始化OktaSignIn
的实例。 这样,应用程序代码将能够与Okta对话,并且Okta将识别出这是您刚刚创建的应用程序。
显示登录小部件
接下来,您将创建代码以将Sign-In Widget实际呈现到页面! 您需要更改render方法,以创建可将小部件呈现到HTML元素。 确保获得对将要呈现的元素的引用 。 然后,添加一个componentDidMount
函数,以确保您不会在HTML元素出现在页面上之前尝试呈现窗口小部件。
import React from 'react';
import OktaSignIn from '@okta/okta-signin-widget';
export default class LoginPage extends React.Component{
constructor(){
super();
this.state = {user:null};
this.widget = new OktaSignIn({
baseUrl: 'https://{oktaOrgUrl}',
clientId: '{clientId}',
redirectUri: 'http://localhost:3000',
authParams: {
responseType: 'id_token'
}
});
}
componentDidMount(){
this.widget.renderEl({el:this.loginContainer},
(response) => {
this.setState({user: response.claims.email});
},
(err) => {
console.log(err);
}
);
}
render(){
return(
<div ref={(div) => {this.loginContainer = div; }} />
);
}
}

免费学习PHP!
全面介绍PHP和MySQL,从而实现服务器端编程的飞跃。
原价$ 11.95 您的完全免费
您还向组件添加了状态。 如果您使用的是流量实现,则自然会来自应用程序状态。 但是,为了使本教程简单LoginPage
,请让您的LoginPage
跟踪其自身的状态。
检查用户是否登录
我们快到了,但是您不一定要立即渲染小部件。 您需要添加检查以确保用户尚未登录,然后将renderEl
移到名为showLogin
的函数中。
// ...other stuff removed for brevity's sake
componentDidMount(){
this.widget.session.get((response) => {
if(response.status !== 'INACTIVE'){
this.setState({user:response.login});
}else{
this.showLogin();
}
});
}
showLogin(){
Backbone.history.stop();
this.widget.renderEl({el:this.loginContainer},
(response) => {
this.setState({user: response.claims.email});
},
(err) => {
console.log(err);
}
);
}
您可能已经在showLogin
方法中注意到了一些奇怪的代码。 第一行: Backbone.history.stop()
。 小部件本身使用Backbone.js在其自己的屏幕之间进行导航(登录,忘记密码等),并且在呈现时将启动Backbone.history
。 由于您现在已将其移至showLogin
函数中,因此只要调用该函数,该小部件都将重新呈现。 因此,这只是告诉Backbone停止历史记录的一个小技巧,因为它将在呈现小部件时重新启动。
最终的LoginPage React组件
让我们总结一下。 确保将类的this
上下文绑定到每个方法。 添加logout
方法,然后更改render
方法,以根据是否有当前登录的用户来决定要渲染的内容。
因此, LoginPage.js
的最终版本应如下所示:
import React from 'react';
import OktaSignIn from '@okta/okta-signin-widget';
export default class LoginPage extends React.Component{
constructor(){
super();
this.state = { user: null };
this.widget = new OktaSignIn({
baseUrl: 'https://{oktaOrgUrl}',
clientId: '{clientId}',
redirectUri: 'http://localhost:3000',
authParams: {
responseType: 'id_token'
}
});
this.showLogin = this.showLogin.bind(this);
this.logout = this.logout.bind(this);
}
componentDidMount(){
this.widget.session.get((response) => {
if(response.status !== 'INACTIVE'){
this.setState({user:response.login});
}else{
this.showLogin();
}
});
}
showLogin(){
Backbone.history.stop();
this.widget.renderEl({el:this.loginContainer},
(response) => {
this.setState({user: response.claims.email});
},
(err) => {
console.log(err);
}
);
}
logout(){
this.widget.signOut(() => {
this.setState({user: null});
this.showLogin();
});
}
render(){
return(
<div>
{this.state.user ? (
<div className="container">
<div>Welcome, {this.state.user}!</div>
<button onClick={this.logout}>Logout</button>
</div>
) : null}
{this.state.user ? null : (
<div ref={(div) => {this.loginContainer = div; }} />
)}
</div>
);
}
}
添加登录链接
现在,React已连接以处理/login
路由,并显示Okta登录小部件以提示用户登录。
通过编辑./src/components/common/Navigation.js
并在现有的Contact链接下添加一个新链接,将Login链接添加到顶部导航栏:
<li><Link to="login">Login</Link></li>
看看这个
现在安装npm软件包:
npm install
立即运行应用程序(使用npm start
)时,您应该看到类似以下内容:
如果应用程序有任何问题,请尝试删除node_modules
文件夹和 package-lock.json
文件,然后重新运行npm install
命令。 这应该可以解决程序包依赖管理中的所有问题。
如果可行:恭喜! 如果没有,请用okta标签向Stack Overflow发布问题,或在Twitter @leebrandt上打我。
React + Okta
您可以在GitHub上的此博客文章中找到该应用程序的完整版本。
在应用程序中建立身份验证很困难。 在您构建的每个应用程序中一遍又一遍地构建它的乐趣就更少了。 Okta为您完成了艰辛的工作,使成为一名开发人员变得更加有趣! 注册一个永久免费的开发者帐户 ,今天就尝试Okta!
希望您喜欢我们的React支持的快速浏览。 如果您对Okta的功能或下一步的建设有疑问,请在Twitter @leebrandt上打我,在下面发表评论,或在GitHub上发布问题。
翻译自: https://www.sitepoint.com/build-react-app-user-authentication-15-minutes/
react 身份证校验校验