织梦网站模板后台密码找回建材网中国建材第一网

web/2025/9/27 11:48:37/文章来源:
织梦网站模板后台密码找回,建材网中国建材第一网,网站备案当面核验,推广下载cognito在本文中#xff0c;我们将研究使用OAuth协议通过Amazon Cognito对单页应用程序#xff08;使用Vue.js构建#xff09;进行身份验证。 在上一篇文章中#xff0c;我们将服务器端应用程序与Amazon Cognito集成在一起。 搭建单页应用程序 我们将使用vue-cli创建一个空… cognito 在本文中我们将研究使用OAuth协议通过Amazon Cognito对单页应用程序使用Vue.js构建进行身份验证。 在上一篇文章中我们将服务器端应用程序与Amazon Cognito集成在一起。 搭建单页应用程序 我们将使用vue-cli创建一个空的Vuejs应用程序。 可以按照此处的说明安装Vue CLI。 让我们通过发出以下命令来创建一个名为aws-cognito-spa-demo的空应用程序 vue create aws-cognito-spa-demo 系统将提示您选择插件 创建应用程序后您可以导航到该目录并发出命令以运行该应用程序 cd aws-cognito-spa-demo npm instal npm run serve 您将在http// localhost8080运行该应用程序 安装其他依赖项 我们将安装将用于该应用程序的必需节点软件包 npm install --save amazon-cognito-auth-js npm install --save amazon-cognito-identity-js npm install --save vue-router npm install --save axios 在Amazon Cognito中创建新的App Client 我们将通过Amazon Cognito控制台创建一个名为test-spa-client的新App客户test-spa-client 如下所示 通过提供回调URL注销URL允许的OAUth流和OAuth范围的值导航到“应用程序客户端设置”来更新创建的客户端的设置 我们使用隐式授予作为SPA应用程序的OAuth流。 创建环境变量 我们将与Amazon Cognito相关的设置存储在属性文件中Vue CLI将在应用程序运行时使其在环境变量中可用。 在此处可以找到有关在Vue JS应用程序中定义环境变量的更多信息。 我们将在.env文件中存储通用的应用程序设置例如cognito重定向URI注销URI在.env存储一些本地设置。 .env。*。local和.env.local文件从git中被忽略。 因此您不必将本地设置提交到版本控制。 # In .env VUE_APP_COGNITO_REDIRECT_URIhttp: //localhost:8080/login/oauth2/code/cognito VUE_APP_COGNITO_REDIRECT_URI_SIGNOUThttp: //localhost:8080/logout VUE_APP_APP_URLhttp: //localhost:8080 然后是.env.local中的以下内容 VUE_APP_COGNITO_USERPOOL_IDcognito userpool id VUE_APP_COGNITO_APP_DOMAINcognito app domain VUE_APP_COGNITO_CLIENT_IDapp client id 创建用户信息存储 我们将使用全局JSON对象存储已登录的用户信息。 这是使用Vuex的另一种方法。 让我们在src/app/user-info-store.js创建JSON对象 var state { cognitoInfo: {}, loggedIn: false , loadingState: true , errorLoadingState: false } function setLoggedIn(newValue) { state.loggedIn newValue; } function setLoggedOut() { state.loggedIn false ; state.cognitoInfo {}; } function setCognitoInfo(newValue){ state.cognitoInfo newValue; } export default { state: state, setLoggedIn: setLoggedIn, setLoggedOut: setLoggedOut, setCognitoInfo: setCognitoInfo } Amazon Cognito API的包装 让我们为Amazon Cognito API创建包装器src/app/auth.js 这将简化诸如构建CognitoAuth对象登录和注销的操作 /* eslint-disable */ {CognitoAuth, StorageHelper} from amazon-cognito-auth-js import {CognitoAuth, StorageHelper} from ; IndexRouter from ../router/index import IndexRouter from ; UserInfoStore from ./user-info-store import UserInfoStore from ; UserInfoApi from ./user-info-api import UserInfoApi from ; const CLIENT_ID process.env.VUE_APP_COGNITO_CLIENT_ID; const APP_DOMAIN process.env.VUE_APP_COGNITO_APP_DOMAIN; const REDIRECT_URI process.env.VUE_APP_COGNITO_REDIRECT_URI; const USERPOOL_ID process.env.VUE_APP_COGNITO_USERPOOL_ID; const REDIRECT_URI_SIGNOUT process.env.VUE_APP_COGNITO_REDIRECT_URI_SIGNOUT; const APP_URL process.env.VUE_APP_APP_URL; var authData { ClientId : CLIENT_ID, // Your client id here AppWebDomain : APP_DOMAIN, TokenScopesArray : [ openid , email ], RedirectUriSignIn : REDIRECT_URI, RedirectUriSignOut : REDIRECT_URI_SIGNOUT, UserPoolId : USERPOOL_ID, } var auth new CognitoAuth(authData); auth.userhandler { onSuccess: function(result) { console.log( On Success result , result); UserInfoStore.setLoggedIn( true ); UserInfoApi.getUserInfo().then(response { IndexRouter.push( / ); });                 }, onFailure: function(err) { UserInfoStore.setLoggedOut(); IndexRouter.go({ path: /error , query: { message: Login failed due to err } }); Login failed due to err } }); } }; function getUserInfoStorageKey(){ var keyPrefix CognitoIdentityServiceProvider. auth.getClientId(); var tokenUserName auth.signInUserSession.getAccessToken().getUsername(); var userInfoKey keyPrefix . tokenUserName .userInfo ; return userInfoKey; } var storageHelper new StorageHelper(); var storage storageHelper.getStorage(); export default { auth: auth, login(){ auth.getSession(); }, logout(){ if (auth.isUserSignedIn()) { var userInfoKey this .getUserInfoStorageKey(); auth.signOut(); storage.removeItem(userInfoKey); } }, getUserInfoStorageKey, } 从Amazon Cognito获取用户信息 身份验证之后我们可以使用访问令牌来获取有关登录用户的信息。为此我们必须向端点发出GET请求 https://app domain/oauth2/userInfo 。 我们在src/app/user-info.js创建了一个实用程序方法getUserInfo() 如下所示 axios from axios import axios from ; auth from ./auth import auth from ; export default { getUserInfo(){ var jwtToken auth.auth.getSignInUserSession().getAccessToken().jwtToken; const USERINFO_URL https:// auth.auth.getAppWebDomain() /oauth2/userInfo ; var requestData { headers: { Authorization : Bearer jwtToken } } return axios.get(USERINFO_URL, requestData).then(response { return response.data; }); } } 上面部分编写的Cognito包装器已使用此API。 创建Vue组件 让我们为以下目的创建一些Vue组件 显示已登录的用户信息 显示注销成功 错误处理组件 我们将使用Vue路由器将URL路径映射到Vue组件。 组件定义如下所示 Home组件 template div class row div class col h3Welcome, /h3 div class alert alert-info {{userInfo}} /div router-link to /logout Logout /router-link /div /div /template script UserInfoStore from ../app/user-info-store import UserInfoStore from ; export default { name: Home , data: function() { return { userInfo: UserInfoStore.state.cognitoInfo } } } /script style /style LogoutSuccess组件 template div class row div class col h2Logged Out successfully/h2 router-link to /login Login/router-link /div /div /template script export default { mounted: function(){         } } /script 错误组件 template div class alert alert-danger {{message}} /div /template script export default { data: function(){ return { message: } }, mounted(){ this .message this .$route.query.message; } } /script 设置路由器 如前一节所述我们将使用Vue Router将URL路径映射到Vue组件。 我们将在router/index.js设置路由器配置如下所示 /* eslint-disable */ Vue from vue import Vue from Router from vue-router import Router from Home from /components/Home import Home from auth from ../app/auth import auth from ; LogoutSuccess from /components/LogoutSuccess import LogoutSuccess from ; UserInfoStore from ../app/user-info-store import UserInfoStore from ; UserInfoApi from ../app/user-info-api import UserInfoApi from ; ErrorComponent from /components/Error import ErrorComponent from ; Vue.use(Router) function requireAuth(to, from, next) {   if (!auth.auth.isUserSignedIn()) { UserInfoStore.setLoggedIn( false ); next({ path: /login , query: { redirect: to.fullPath } }); } else { UserInfoApi.getUserInfo().then(response { UserInfoStore.setLoggedIn( true ); UserInfoStore.setCognitoInfo(response); next(); });       } } export default new Router({ mode: history , base: / , routes: [ { path: / , name: Home , component: Home, beforeEnter: requireAuth }, { path: /login , beforeEnter(to, from, next){ auth.auth.getSession(); } }, { path: /login/oauth2/code/cognito , beforeEnter(to, from, next){ var currUrl window.location.href;         //console.log(currUrl); auth.auth.parseCognitoWebResponse(currUrl); //next(); } }, { path: /logout , component: LogoutSuccess, beforeEnter(to, from, next){ auth.logout(); next(); } }, { path: /error , component: ErrorComponent } ] }) 我们利用路由对象的beforeEnter属性来添加呈现组件所需的所有先决条件。 然后在此属性中检查用户是否使用我们创建的Cognito包装器登录。 因此对于需要保护的路径我们可以定义beforeEnter属性。 创建的默认应用程序具有一个App.vue组件它将成为我们的根组件。 我们使用router-view/标记表示此处HTML将基于路由器配置中路径解析到的组件。 因此我们的App.vue版本如下所示 template div id app img alt Vue logo src ./assets/logo.png div class contents router-view/ /div /div /template script export default { name: app } /script style #app { font-family: Avenir , Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } /style 然后我们更新src/main.js以引用包含路由器配置的目录如下所示 Vue from vue import Vue from App from ./App.vue import App from router from ./router import router from Vue.config.productionTip false new Vue({ render: h h(App), router }).$mount( #app ) 运行应用程序 您可以通过发出以下命令来运行该应用程序 npm run serve 。 导航到localhost8080将带您进入Cognito登录屏幕 输入您已经在用户池中注册的用户的用户名和密码甚至可以注册一个新用户。 登录后您将被重定向回Vue JS应用 注销链接将注销用户。 完整的代码可以在Github仓库中找到 。 翻译自: https://www.javacodegeeks.com/2019/04/amazon-cognito-single-page-application-vue.htmlcognito

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设消费调查问卷搜索引擎网站优化推广

随着Android 13的发布,我们迎来了一个令人兴奋的新品时刻。然而,对于一些用户而言,这也意味着必须面对一个重要的问题:Android 13不再支持PPTP协议。如果你是一个习惯使用PPTP协议来连接换地址的用户,那么你可能需要重…

网站招标建设网页制作基础教程第2版答案

定义 chat: 在iOS开发中,属性关键字是用于声明类的属性(实例变量)的修饰符。属性关键字可以影响属性的访问权限、内存管理和生成相关的getter和setter方法。 属性关键字有哪些? 分类属性关键字原子性atomic、nonato…

网站建设的公司在哪找网站做优化需要哪些后台信息

平常还觉得编码问题一般能水过去,到爬虫这真是"不信抬头看,苍天饶过谁"...其实,Python2和Python3中对于编码已经发生了很大的改变(但其实是更方便了),我们一个个来讨论:Python21.在Python2中默认编码为ASCII…

闵行网站建设推广如何建一个手机网站

(一)HTTP协议是无状态的。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时相同。服务器不记得访问过得这个用户,也不记得为这个客户服务过多少次。 (二)HT…

网站建设南京阿里指数官网

计算圆的面积和周长 编写程序计算圆的面积和周长。输入圆的半径,程序计算出圆的面积和周长,圆的面积等于3.14*半径*半径;圆的周长等于2*3.14*半径。 1. 准备工作 (1)保留舞台中的小猫角色和白色背景; 2…

营销式网站网站建设吉金手指排名15

‘删除Sheet1上的单元格区域A1:D10,并将其余单元格左移以填补被删除单元格的位置 Sheet1.Range(“A1:D10”).Delete Shift:xlShiftToLeft ‘删除指定行 Range(“1:1”).Delete ‘删除指定列 Columns(5).Delete ‘删除当前行 ActiveCell.EntireRow.Delete ‘删除工作表中的重复行…

网站建设服务包括什么网站建设费可以一次性冲费用吗

▲ 点击查看出门能不背包就不背包,几乎是小爆身边每个男生的人生信条。不背包时,两手空空一身轻,潇洒有型。但一旦到了必须背包,比如五一外出回家或旅游的时候,男同胞们翻箱倒柜找出来的背包,大多都是这种双…

网站建设专业平台深圳住建局工程交易中心

计算公式:((U*I)/1000)*t 说明: 这里计算的都是电器的额定功率、额定电压、额定电流。U 是电压;I 是电流;t 是时间,单位是小时;U*I 得到的是电功率,例如电压12v,电流5A,…

网站如何吸引国内能用wordpress吗

一、引言 Docker是一种流行的容器化技术,可用于在多个平台下保持软件运行的一致性、轻松地实现应用程序移植性,以及提高开发、测试、部署和管理过程的效率。Docker容器化开发可以改变传统软件运行、部署、管理与维护的方式,使其更加灵活和高…

定制网站开发哪个好天津百度seo代理

1.mysql_fetch_rowmysql_fetch_row,这个函数是从结果集中取一行作为枚举数据,从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。 注意,这里是从0开始偏移&…

深圳专业建网站技术支持 昆明网站建设

一、RESTful GET获取资源、POST新建资源、PUT更新资源、DELETE删除资源。 RESTful两大特性 1、安全性:GET请求不会引起资源本身改变。 2、幂等性:对一个接口请求和多次请求返回的资源应该一致。 2xx:成功 4xx:客户端错误。 …

网站构成三要素网站的建设属于无形资产吗

或许你写过了很多行代码,修过许多的bug,学过各种各样的语言,却只在一个最好的时机遇见了他…… 是啥? 敲!黑!板!跟!我!念!Weex~~&…

珠海公司网站设计如何自学wordpress

题目:给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应…

晋江企业网站开发承接电商网站建设

邮件配置Laravel的邮件功能构建于流行的SwiftMailer库之上,并提供了简介、高效的API。邮件配置信息在app/config/mail.php文件中,并提供了包含SMTP主机、端口和证书的配置选项,也可以为发送的邮件配置一个全局from(来自)地址。你可以使用任何…

烟台公司中企动力提供网站建设国外设计教程网站

前言 我想大家平时都在开发重都遇见过屎山代码,这些屎山代码一般都是由于复杂且庞大的if-else造成的,状态模式,是一种很好的优化屎山代码的设计模式,本文将采用两个业务场景的示例来讲解如何使用状态模式拯救屎山代码。 目录 前…

扩展名 网站微分销平台登陆

在汽车拍摄与旅行摄影领域,天空作为画面中的重要元素,往往决定着整体视觉效果的成败。美摄科技作为业界领先的AI视觉技术提供商,近日推出了全新的AI实时换天解决方案,为用户带来了前所未有的创意空间与效率提升。 传统的换天技术…

北京电商平台网站建设常州营销推广公司

论文阅读其实就是用自己的话讲一遍,然后理解其中的方法 0、论文基本信息 为什么阅读此篇论文:因为它是DMP经典论文,被引多次,学史可以明智,了解最初机理。 论文题目:Learning and Generalization of Moto…

破解wordpress网站密码旅游网站建设规划书模板下载

多好的实战项目大家抓紧时间实操起来呀移动电商实战这次能上岸,最重要的是这个Vue3VantUI.NET6SqlSugar移动电商实战,全部都是最新最热的技术栈,写上简历后面试基本上都是问的这块儿内容。我先给大家看看项目的UI。项目UI全套实战源码这个电商…

主播网站建立广西住房城乡和建设厅网站

一、前言 多比特一般为数据,其在跨时钟域传输的过程中有多种处理方式,比如DMUX,异步FIFO,双口RAM,握手处理。本文介绍通过DMUX的方式传输多比特信号。 二、DMUX同步跨时钟域数据 dmux表示数据分配器,该方…

网站建设图片排版如何开发微信公众平台

这是我面试经常问的一个问题,很多人并不明白其中的区别。 如上图,整体的质量体系架构图相对简单,主要包含三个部分:愿景(高质量交付-快、好)、能力(中间三层不同的能力)和…