使用OpenID Connect和OKTA在应用中使用OpenID Connect和OKTA设置Angular身份验证
本文最初发表在Okta开发人员博客上。感谢您支持使SitietPoint成为可能的合作伙伴。
Angular(以前称为Angular 2.0)迅速成为构建现代单页应用程序的最强大方法之一。核心优势是Angular专注于构建可重复使用的组件,这有助于您将应用程序中的各种担忧解散。以身份验证为例:构建可能会很痛苦,但是一旦将其包装到组件中,就可以在整个应用程序中重复使用身份验证逻辑。>
钥匙要点
>通过与Okta设置OpenID Connect应用程序无缝集成身份验证,以确保安全的用户管理。
已安装了 >您应该在http:// localhost:4200。
在终端窗口中,将CD CD到您的项目目录中并运行以下命令。这将创建一个搜索组件。
>
>在src/app/app.component.html中,调整占位符内容,然后添加标签以显示路由。 >现在您已经设置了路由,您可以继续编写搜索功能。
为了解决此问题,打开src/app/app.module.ts并添加formsModule作为@ngmodule中的导入:
创建SRC/Assets/data/people.json保存您的数据。
创建此文件的原因是,您可以在单行上导入多个类,而不必在单独的行上导入每个单独的类。 >
>
现在,单击搜索按钮应起作用。为了使结果看起来更好,请删除
>
>修改src/app/search/search.component.html添加一个用于编辑人员的链接。
运行以下命令以生成editComponent。
>您可以将CSS添加到src/app/edit/edit/edit.component.css,如果要使表单看起来更好。 > 在src/app/edit/edit/edit.component.html中调用save()函数以更新人的数据。您已经在上面实现了这一点。
该函数调用gotolist()函数,该函数将用户发送回搜索屏幕时,将人的名字附加到URL。
进行所有这些更改后,您应该能够搜索/编辑/更新一个人的信息。如果有效 - 工作好!
您可能会注意到的一件事是,您可以清除表单中的任何输入元素并保存。至少应需要名称字段。否则,搜索结果中没有任何点击。
在此屏幕截图中,您可能会注意到地址字段为空白。这是由您的控制台中的错误来解释的。 要修复,请在所有地址字段中添加名称属性。例如: 现在的值应在所有字段中显示,并需要在所有字段中显示。 如果您想提供自己的验证消息而不是依靠浏览器,请完成以下步骤:
>利用路由来管理应用程序中的导航,允许使用更顺畅的用户流和更好的状态管理。
实施表单验证以确保数据完整性并提供反馈,从而提高了总体可用性。
大约20分钟
>最喜欢的文本编辑器或IDE。我推荐Intellij Idea<span>git clone https://github.com/mraible/ng-demo.git
</span>
这将创建一个NG-DEMO项目并在其中运行NPM安装。完成大约需要一分钟的时间,但这可能会根据您的连接速度而有所不同。>
<span>git clone https://github.com/mraible/ng-demo.git
</span>
>您可以确保新项目的测试通过,运行NG测试:
ng new ng-demo
添加搜索功能,在IDE或您喜欢的文本编辑器中打开项目。对于Intellij Idea,请使用文件>新项目>静态网络,并指向NG-DEMO目录。
<span>[mraible:~/dev] $ ng new ng-demo
</span>installing ng
create .editorconfig
create README.md
create src/app/app.component.css
create src/app/app.component.html
create src/app/app.component.spec.ts
create src/app/app.component.ts
create src/app/app.module.ts
create src/assets/.gitkeep
create src/environments/environment.prod.ts
create src/environments/environment.ts
create src/favicon.ico
create src/index.html
create src/main.ts
create src/polyfills.ts
create src/styles.css
create src/test.ts
create src/tsconfig.app.json
create src/tsconfig.spec.json
create src/typings.d.ts
create .angular-cli.json
create e2e/app.e2e-spec.ts
create e2e/app.po.ts
create e2e/tsconfig.e2e.json
create .gitignore
create karma.conf.js
create package.json
create protractor.conf.js
create tsconfig.json
create tslint.json
Successfully initialized git.
Installing packages <span>for tooling via npm.
</span>Installed packages <span>for tooling via npm.
</span>You can <span><span>`ng set --global packageManager=yarn`</span>.
</span>Project <span>'ng-demo' successfully created.
</span><span>[mraible:~] 46s $
</span>
$ ng <span>--version
</span> _ _ ____ _ ___
/ <span>\ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
</span> / △ <span>\ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
</span> / ___ <span>\| | | | (_| | |_| | | (_| | | | |___| |___ | |
</span>/_/ <span>\_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
</span> <span>|___/
</span>@angular/cli: <span>1.3.2
</span>node: <span>8.4.0
</span>os: darwin x64
ng serve
$ ng <span>test
</span><span>...
</span>Chrome <span>60.0.3112 (Mac OS X 10.12.6): Executed 3 of 3 SUCCESS (0.239 secs / 0.213 secs)
</span>
$ ng g component search
installing component
create src/app/search/search.component.css
create src/app/search/search.component.html
create src/app/search/search.component.spec.ts
create src/app/search/search.component.ts
update src/app/app.module.ts
获得搜索结果,请创建一个向JSON文件提出HTTP请求的搜索服务。首先生成新服务。
<span><span><span><h2</span>></span>Search<span><span></h2</span>></span>
</span><span><span><span><form</span>></span>
</span> <span><span><span><input</span> type<span>="search"</span> name<span>="query"</span> [(ngModel)]<span>="query"</span> (keyup.enter)<span>="search()"</span>></span>
</span> <span><span><span><button</span> type<span>="button"</span> (click)<span>="search()"</span>></span>Search<span><span></button</span>></span>
</span><span><span><span></form</span>></span>
</span><span><span><span><pre</span>></span>{{searchResults | json}}<span><span></pre</span>></span>
</span>
<span>import { Routes, RouterModule } from '@angular/router';
</span>
<span>const appRoutes: Routes = [
</span> <span>{path: 'search', component: SearchComponent},
</span> <span>{path: '', redirectTo: '/search', pathMatch: 'full'}
</span><span>];
</span>
<span><span>@NgModule</span>({
</span> <span>...
</span> imports<span>: [
</span> <span>...
</span> RouterModule<span>.forRoot(appRoutes)
</span> <span>]
</span> <span>...
</span><span>})
</span><span>export class AppModule { }
</span>
<span>git clone https://github.com/mraible/ng-demo.git
</span>
ng new ng-demo
<span>[mraible:~/dev] $ ng new ng-demo
</span>installing ng
create .editorconfig
create README.md
create src/app/app.component.css
create src/app/app.component.html
create src/app/app.component.spec.ts
create src/app/app.component.ts
create src/app/app.module.ts
create src/assets/.gitkeep
create src/environments/environment.prod.ts
create src/environments/environment.ts
create src/favicon.ico
create src/index.html
create src/main.ts
create src/polyfills.ts
create src/styles.css
create src/test.ts
create src/tsconfig.app.json
create src/tsconfig.spec.json
create src/typings.d.ts
create .angular-cli.json
create e2e/app.e2e-spec.ts
create e2e/app.po.ts
create e2e/tsconfig.e2e.json
create .gitignore
create karma.conf.js
create package.json
create protractor.conf.js
create tsconfig.json
create tslint.json
Successfully initialized git.
Installing packages <span>for tooling via npm.
</span>Installed packages <span>for tooling via npm.
</span>You can <span><span>`ng set --global packageManager=yarn`</span>.
</span>Project <span>'ng-demo' successfully created.
</span><span>[mraible:~] 46s $
</span>
$ ng <span>--version
</span> _ _ ____ _ ___
/ <span>\ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
</span> / △ <span>\ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
</span> / ___ <span>\| | | | (_| | |_| | | (_| | | | |___| |___ | |
</span>/_/ <span>\_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
</span> <span>|___/
</span>@angular/cli: <span>1.3.2
</span>node: <span>8.4.0
</span>os: darwin x64
ng serve
标签,然后在src/app/app/search/search.component.html中替换为
。
然后,在src/app/search/search.component.css中添加一些其他CSS以改进其表布局。
$ ng <span>test
</span><span>...
</span>Chrome <span>60.0.3112 (Mac OS X 10.12.6): Executed 3 of 3 SUCCESS (0.239 secs / 0.213 secs)
</span>
$ ng g component search
installing component
create src/app/search/search.component.css
create src/app/search/search.component.html
create src/app/search/search.component.spec.ts
create src/app/search/search.component.ts
update src/app/app.module.ts
<span><span><span><h2</span>></span>Search<span><span></h2</span>></span>
</span><span><span><span><form</span>></span>
</span> <span><span><span><input</span> type<span>="search"</span> name<span>="query"</span> [(ngModel)]<span>="query"</span> (keyup.enter)<span>="search()"</span>></span>
</span> <span><span><span><button</span> type<span>="button"</span> (click)<span>="search()"</span>></span>Search<span><span></button</span>></span>
</span><span><span><span></form</span>></span>
</span><span><span><span><pre</span>></span>{{searchResults | json}}<span><span></pre</span>></span>
</span>
>
<span>import { Routes, RouterModule } from '@angular/router';
</span>
<span>const appRoutes: Routes = [
</span> <span>{path: 'search', component: SearchComponent},
</span> <span>{path: '', redirectTo: '/search', pathMatch: 'full'}
</span><span>];
</span>
<span><span>@NgModule</span>({
</span> <span>...
</span> imports<span>: [
</span> <span>...
</span> RouterModule<span>.forRoot(appRoutes)
</span> <span>]
</span> <span>...
</span><span>})
</span><span>export class AppModule { }
</span>
<span><span><span><h1</span>></span>Welcome to {{title}}!<span><span></h1</span>></span>
</span><span><!-- Routed views go here -->
</span><span><span><span><router-outlet</span>></span><span><span></router-outlet</span>></span>
</span>
>在src/app/app.module.ts中为此组件添加路由:<span>import { FormsModule } from '@angular/forms';
</span>
<span><span>@NgModule</span>({
</span> <span>...
</span> imports<span>: [
</span> <span>...
</span> FormsModule
<span>]
</span> <span>...
</span><span>})
</span><span>export class AppModule { }
</span>
<span><span>:host</span> {
</span> <span>display: block;
</span> <span>padding: 0 20px;
</span><span>}
</span>
$ ng g <span>service search
</span>installing <span>service
</span> create src/app/search.service.spec.ts
create src/app/search.service.ts
WARNING Service is generated but not provided, it must be provided to be used
<span>mkdir -p src/app/shared/search
</span><span>mv src/app/search.service.* src/app/shared/search/.
</span>
<span>git clone https://github.com/mraible/ng-demo.git
</span>
ng new ng-demo
<span>[mraible:~/dev] $ ng new ng-demo
</span>installing ng
create .editorconfig
create README.md
create src/app/app.component.css
create src/app/app.component.html
create src/app/app.component.spec.ts
create src/app/app.component.ts
create src/app/app.module.ts
create src/assets/.gitkeep
create src/environments/environment.prod.ts
create src/environments/environment.ts
create src/favicon.ico
create src/index.html
create src/main.ts
create src/polyfills.ts
create src/styles.css
create src/test.ts
create src/tsconfig.app.json
create src/tsconfig.spec.json
create src/typings.d.ts
create .angular-cli.json
create e2e/app.e2e-spec.ts
create e2e/app.po.ts
create e2e/tsconfig.e2e.json
create .gitignore
create karma.conf.js
create package.json
create protractor.conf.js
create tsconfig.json
create tslint.json
Successfully initialized git.
Installing packages <span>for tooling via npm.
</span>Installed packages <span>for tooling via npm.
</span>You can <span><span>`ng set --global packageManager=yarn`</span>.
</span>Project <span>'ng-demo' successfully created.
</span><span>[mraible:~] 46s $
</span>
>要命名,请修改edit.component.html,以将所需属性添加到名称。
标签之后添加,然后在最后一个之前将其关闭。您还需要将(ngsubmit)处理程序添加到表格中,然后更改保存按钮为常规提交按钮。
$ ng <span>--version
</span> _ _ ____ _ ___
/ <span>\ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
</span> / △ <span>\ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
</span> / ___ <span>\| | | | (_| | |_| | | (_| | | | |___| |___ | |
</span>/_/ <span>\_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
</span> <span>|___/
</span>@angular/cli: <span>1.3.2
</span>node: <span>8.4.0
</span>os: darwin x64
ng serve
$ ng <span>test
</span><span>...
</span>Chrome <span>60.0.3112 (Mac OS X 10.12.6): Executed 3 of 3 SUCCESS (0.239 secs / 0.213 secs)
</span>
$ ng g component search
installing component
create src/app/search/search.component.css
create src/app/search/search.component.html
create src/app/search/search.component.spec.ts
create src/app/search/search.component.ts
update src/app/app.module.ts
以上是使用OpenID Connect和OKTA在应用中使用OpenID Connect和OKTA设置Angular身份验证的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。
