// ユーザープールの設定 const poolData = { UserPoolId : 'ap-northeast-1_nWh7B56uE', ClientId : '4mu7lcovscqhkkankmiht1pmd6' }; const userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); var apigClient = apigClientFactory.newClient(); var storage = window.sessionStorage; var loginFlag = false; // ログイン処理2重動作防止用フラグ /** * ログイン処理 */ async function signIn() { if( loginFlag ){ return; } loginFlag = true; console.log("signIn()"); var username = $('#username').val(); var password = $('#password').val(); // 何か1つでも未入力の項目がある場合、メッセージを表示して処理を中断 if (!username | !password) { $("#signin div#message span").empty(); $("#signin div#message span").append("All fields are required."); loginFlag = false; return false; } // 認証データの作成 var authenticationData = { Username: username, Password: password }; var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData); var userData = { Username: username, Pool: userPool }; var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData); // 認証処理 cognitoUser.authenticateUser(authenticationDetails, { onSuccess: function (result) { storage.setItem('accessToken.payload.exp', result.accessToken.payload.exp); storage.setItem('username', result.accessToken.payload.username); movePage(); loginFlag = false; }, newPasswordRequired: function (userAttributes, requiredAttributes) { cognitoUser.completeNewPasswordChallenge(password, {}, this) }, mfaRequired(challengeName, challengeParameters) { console.log("mfaRequired"); console.log(challengeName, challengeParameters); if( challengeName === 'SMS_MFA'){ var verificationCode = prompt("SMSのワンタイムパスワードを入力してください",""); if( verificationCode != null && verificationCode.length != 0 && isHanEisu(verificationCode) ){ cognitoUser.sendMFACode(verificationCode, this); }else{ cognitoUser.sendMFACode("0", this); } } }, onFailure: function(err) { // サインイン失敗の場合、エラーメッセージを画面に表示 console.log(err); $("div#message span").empty(); $("div#message span").append(err.message); loginFlag = false; } }); }; async function movePage(){ // サインイン成功の場合、次の画面へ遷移の為、パッケージ一覧取得 var packageListInfo = {}; var userName = getCurrentUserName(); var body = { username : userName }; /*------ アプリ一覧をAPI Gateway経由で取得し、セッションストレージへ保存 -----*/ try{ await apigClient.getpackagelistPost({}, body, {}) .then(function(result){ packageListInfo = result.data; storage.setItem('userKey', packageListInfo.userKey); storage.setItem('packageListInfo', JSON.stringify(packageListInfo)); location.replace("./list.html"); }).catch( function(result){ console.log(result); }); }catch(error){ } } /** * ログアウト処理 */ async function logout() { await logoutPost(); var cognitoUser = userPool.getCurrentUser(); if (cognitoUser) { // ログアウト cognitoUser.signOut(); } storage.clear(); } async function logoutPost(){ var userName = getCurrentUserName(); var body = { username : userName }; try{ await apigClient.logoutPost({}, body, {}) .then(function(result){ }).catch( function(result){ console.log(result); }); }catch(error){ } } /** * トークン有効期限チェック */ function checkEffectiveDateToken() { // ログイン時に保管していたアクセストークンの有効期限 var exp = sessionStorage.getItem('accessToken.payload.exp') * 1000; var now = new Date().getTime(); // アクセストークの有効期限が切れていた場合 if (now > exp) { return false; }else{ return true; } } function getCurrentUserName(){ var cognitoUser = userPool.getCurrentUser(); if (cognitoUser) { console.log('user name is ' + cognitoUser.getUsername()); return cognitoUser.getUsername(); }else{ console.log("getCurrentUser() error"); } } function isHanEisu(str){ str = (str==null)?"":str; if(str.match(/^[A-Za-z0-9]*$/)){ return true; }else{ return false; } }