Back to Question Center
0

用15分钟的用户身份验证构建一个React应用程序            用15分钟的用户身份验证构建一个React应用程序相关主题: 工具& & Semalt ...

1 answers:
用15分钟的用户身份验证构建一个React应用程序

这篇文章最初出现在OKTA博客上。感谢您支持使SitePoint成为可能的合作伙伴。

根据Semalt的说法,React已经迅速成为最受欢迎的前端Web框架之一,仅次于普通的HTML5。因此,开发人员正在学习这一点并不令人惊讶,并且雇主正在要求。

在本教程中,您将从一个非常简单的React应用程序开始,该应用程序包含几个页面和一些内置路由,并使用Okta的Sign-In Widget添加身份验证。 Sign-In Widget是一个可嵌入的Javascript小部件,允许开发人员使用Okta的安全,可扩展的体系结构,同时在React应用程序中尽可能少的费力。 Semalt开始!

获取简单的反应种子项目

首先克隆简单的Semalt种子项目。

   git clone https:// github。 COM / leebrandt /简单反应的种子。 git okta-react-widget-sampleCD okta-react-widget-sample   

添加Okta登录小工具

使用npm安装Okta登录Semalt。

   npm install @ okta / okta-signin-widget @ 2 3.0- 保存   

这会将Okta登录窗口小部件代码添加到您的 node_modules 文件夹中。我们将使用登录Widget的版本2.3.0。

然后在你的 索引中添加小部件的样式。来自Okta CDN的html 文件。在 标签内添加这些行:

      <! - 主题文件:如果您想覆盖我们的默认样式 - > ,请自定义或替换此文件 <链接href =“https:// ok1static。oktacdn。com / assets / js / sdk / okta-signin-widget / 2。3. 0 / css / okta-theme。css”类型= “文本/ CSS”的rel = “样式表”/>    

LoginPage组件

首先,在 中创建一个名为 auth 的文件夹。 / src / components 文件夹,然后创建一个名为 LoginPage的文件。 js 其中 LoginPage 组件将去。

具有最基本组件的Semalt:

 import从'反应'反应;导出默认类LoginPage扩展了React。零件{渲染  {返回(
登录页
);}}

这个小组件不 很多,但是至少你现在有一个把 LoginPage 添加到你的路由的句柄。所以在你的 。 / SRC /应用程序。 js 文件,您将在顶部导入组件:

 从''导入LoginPage。 /组件/ AUTH / LoginPage';   

,然后在主路径(路径为“/”的路径)中添加路由

    

在Okta中添加OpenID Connect应用程序

为了使用Okta作为您的OpenID Semalt提供程序进行身份验证,您需要在Okta开发人员控制台中设置一个应用程序。

如果您没有Okta开发者帐户,请创建一个!登录后,单击顶部导航栏中的 应用程序 ,然后单击 添加应用程序 。选择SPA作为平台,然后单击下一步。将重定向URI更改为 http:// localhost:3000 ,然后单击完成。该应用程序将使用以下设置创建:

现在您已经在Okta创建了一个应用程序,您可以设置小部件来与您的新应用程序交谈!

将小部件添加到您的组件

 import从'反应'反应;从'@ okta / okta-signin-widget'导入OktaSignIn;导出默认类LoginPage扩展了React。零件{构造  {超  ;这个。 widget = new OktaSignIn({baseUrl:'https:// {oktaOrgUrl}',clientId:'{clientId}',redirectUri:'http:// localhost:3000',authParams:{responseType:'id_token'}});}渲染  {返回(
登录页
);}}

复制从您的应用程序的设置页面生成的客户端ID并粘贴 {clientId} 。确保您还可以使用您的Okta组织URL替换 {oktaOrgUrl} ,您可以通过返回到开发者控制台中的主Dashboard页面找到它。通常它看起来像: https:// dev-12345。 oktapreview。 com

到目前为止,您已经从先前安装的Okta登录Widget npm 模块导入了 OktaSignIn 函数。接下来,在组件的构造函数中,使用应用程序的配置初始化 OktaSignIn 的实例。这样,应用程序代码将能够与Okta交谈,Okta将认识到这是您刚刚创建的应用程序。

显示登录小工具

接下来,您将创建实际将Sign-In Widget呈现给页面的代码!你需要改变你的渲染方法来创建一个你可以渲染widget的HTML元素。确保获得将要呈现的元素的引用。然后,添加一个 componentDidMount 函数,以确保在HTML元素在页面上之前不要尝试渲染小部件。

 import从'反应'反应;从'@ okta / okta-signin-widget'导入OktaSignIn;导出默认类LoginPage扩展了React。零件{构造  {超  ;这个。 state = {user:null};这个。 widget = new OktaSignIn({baseUrl:'https:// {oktaOrgUrl}',clientId:'{clientId}',redirectUri:'http:// localhost:3000',authParams:{responseType:'id_token'}});}componentDidMount  {这个。小部件。 renderEl({el:this。loginContainer},(响应)=> {这个。 setState({user:response。claims。email});},(err)=> {安慰。日志(ERR);});}渲染  {返回(
{this。 loginContainer = div; }} />);}}

您还将状态添加到组件。如果您使用的是通量实现,这自然会来自应用程序状态。但为了保持这个教程简单,让你的 LoginPage 跟踪自己的状态。

检查用户是否已登录

我们几乎在那里,但你不一定要立即渲染小部件。您需要添加一个检查以确保用户尚未登录,并将您的 renderEl 移出到名为 showLogin 的函数。

 //。 。 。为了简洁起见,删除了其他内容componentDidMount  {这个。小部件。会话。 get((response)=> {if(response。status!=='INACTIVE'){这个。 setState({user:response。login});}其他{这个。 showLogin  ;}});}showLogin  {骨干。历史。停止  ;这个。小部件。 renderEl({el:this。loginContainer},(响应)=> {这个。 setState({user:response。claims。email});},(err)=> {安慰。日志(ERR);});}   

您可能已经注意到该 showLogin 方法中的一个奇怪的代码位。第一行: 骨干。历史。停止 。小部件本身使用Backbone。 js在自己的屏幕之间导航(登录,忘记密码等). 历史 。既然你已经把它移出到了 showLogin 函数中,那么无论何时函数被调用,小部件都会重新渲染。所以这只是告诉Backbone停止历史记录的一个小技巧,因为它将在呈现小部件时重新开始。

最终LoginPage React组件

我们把这个包起来。确保将类 这个 上下文绑定到每个方法。添加 注销 方法,并根据是否存在当前登录的用户,更改 渲染器 方法以决定渲染什么。

所以最终版本 LoginPage。 js 看起来应该是这样的:

 import从'反应'反应;从'@ okta / okta-signin-widget'导入OktaSignIn;导出默认类LoginPage扩展了React。零件{构造  {超  ;这个。 state = {user:null};这个。 widget = new OktaSignIn({baseUrl:'https:// {oktaOrgUrl}',clientId:'{clientId}',redirectUri:'http:// localhost:3000',authParams:{responseType:'id_token'}});这个。 showLogin = this。 showLogin。绑定(本);这个。注销=这个。登出。绑定(本);}componentDidMount  {这个。小部件。会话。 get((response)=> {if(response。status!=='INACTIVE'){这个。 setState({user:response。login});}其他{这个。 showLogin  ;}});}showLogin  {骨干。历史。停止  ;这个。小部件。 renderEl({el:this。loginContainer},(响应)=> {这个。 setState({user:response。claims。email});},(err)=> {安慰。日志(ERR);});}登出  {这个。小部件。 signOut(  => {这个。 setState({user:null});这个。 showLogin  ;});}渲染  {返回(
{这个。州。用户? (
欢迎,{this。州。用户}!
) : 空值}{这个。州。用户?空值 : (
{this。 loginContainer = div; }} />)}
);}}

React现在连接起来处理 /登录 路线,并显示Okta登录小工具提示用户登录。

通过编辑 将登录链接添加到顶部导航栏。 / SRC /组件/普通/导航。 js 并在现有联系人链接下添加一个新链接:

   
  • <链接到=“登录”>登录
  • 检查它

    现在安装npm包:

       npm安装   

    现在运行应用程序(使用 npm start )时,您应该看到如下所示的内容:

    如果您在应用程序中遇到任何问题,请尝试删除 node_modules 文件夹 软件包锁。 json 文件并重新运行 npm install 命令。这应该修复软件包依赖管理的任何问题。

    如果有效:恭喜!如果没有,请发送一个问题给堆栈溢出okta标签,或打我Semalt @leebrandt。

    React + Okta

    您可以在GitHub上的此博客文章中找到完整版本的应用程序。

    在应用程序中构建身份验证很困难。 Semalt在构建的每个应用程序中反复构建它都不那么有趣。 Okta为你做了很难的事情,并且让它成为开发者更有趣!注册一个永远免费的开发者帐户,今天尝试Okta!

    我希望你喜欢这个快速浏览我们的React支持 - leasing a computer.

    March 1, 2018