放大SSR错误->AuthUserPoolException:Auth UserPool未配置

问题描述 投票:0回答:1

启用 SSR 的情况下运行,在服务器端我们需要令牌来进行 api 调用,问题是当我们尝试在服务器端使用 amplify ssr 时,在调用 amplify 登录方法时,我们收到此错误 -> AuthUserPoolException :未配置身份验证用户池。

增强SSR

import { signIn } from '@aws-amplify/auth';
import { CookieStorage, createAWSCredentialsAndIdentityIdProvider, createKeyValueStorageFromCookieStorageAdapter, createUserPoolsTokenProvider, runWithAmplifyServerContext } from 'aws-amplify/adapter-core';
import { parseAmplifyConfig } from 'aws-amplify/utils';
import config from 'src/amplifyconfiguration.json';
import { aws_user } from 'src/environments/environment';

/* get the amplify configuration object */
const amplifyConfig = parseAmplifyConfig(config);


/* create the key-value storage */
const keyValueStorage = createKeyValueStorageFromCookieStorageAdapter({
    get(name) {
        const value = cookieService.get({ key: name });
        return { name, value };
    },
    getAll() {
        const allCookies: CookieStorage.Cookie[] = Object.entries(cookieService.getAll()).map(([name, value]) => ({ name, value }));
        return allCookies;
    },
    set(name, value) {
        cookieService.set({ key: name, value: value });
    },
    delete(name) {
        cookieService.delete({ key: name });
    }
});

/* create token provider */
const tokenProvider = createUserPoolsTokenProvider(
    amplifyConfig.Auth,
    keyValueStorage
);

/* create credentials provider */
const credentialsProvider = createAWSCredentialsAndIdentityIdProvider(
    amplifyConfig.Auth,
    keyValueStorage
);

export async function initSession(): Promise<string> {
    const session = await runWithAmplifyServerContext(
        amplifyConfig,
        {
            Auth: { tokenProvider, credentialsProvider }
        },
        async (contextSpec) => {
            let session;
            try {
                session = await signIn({ username: username, password: password });
            } catch (_) { return `${_}` }
            return `${session.isSignedIn}`;
        },
    );
    return session;
}


打包json

  "dependencies": {
    "@angular/animations": "^17.1.0",
    "@angular/cdk": "^17.0.4",
    "@angular/common": "^17.1.0",
    "@angular/compiler": "^17.1.0",
    "@angular/core": "^17.1.0",
    "@angular/forms": "^17.1.0",
    "@angular/material": "^17.0.4",
    "@angular/platform-browser": "^17.1.0",
    "@angular/platform-browser-dynamic": "^17.1.0",
    "@angular/platform-server": "^17.1.0",
    "@angular/router": "^17.1.0",
    "@angular/service-worker": "^17.1.0",
    "@angular/ssr": "^17.1.2",
    "@auth0/angular-jwt": "^5.1.2",
    "@aws-amplify/cli": "^12.8.2",
    "@aws-amplify/ui-angular": "^5.0.3",
    "@types/crypto-js": "^4.1.2",
    "aws-amplify": "^6.0.6",
    "aws-crt": "^1.20.0",
    "country-flags-svg": "^2.0.0-beta.1",
    "crypto-js": "^4.1.1",
    "express": "^4.18.2",
    "firebase": "^10.7.2",
    "lottie-web": "^5.12.2",
    "ng-event-bus": "^6.0.0",
    "ng-swagger-gen": "^2.3.1",
    "ngx-cookie-service": "^17.0.1",
    "ngx-lottie": "^10.0.0",
    "onesignal-ngx": "^2.0.1",
    "rxjs": "~7.8.0",
    "swiper": "^11.0.5",
    "tslib": "^2.3.0",
    "zone.js": "~0.14.3"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^17.1.2",
    "@angular/cli": "^17.1.2",
    "@angular/compiler-cli": "^17.1.0",
    "@types/express": "^4.17.17",
    "@types/jasmine": "~5.1.0",
    "@types/node": "^18.18.0",
    "jasmine-core": "~5.1.0",
    "karma": "~6.4.0",
    "karma-chrome-launcher": "~3.2.0",
    "karma-coverage": "~2.2.0",
    "karma-jasmine": "~5.1.0",
    "karma-jasmine-html-reporter": "~2.1.0",
    "typescript": "~5.3.2"
  }

放大配置 json

{
  "aws_project_region": "region",
  "aws_cognito_identity_pool_id": "identity_pool_id",
  "aws_cognito_region": "region",
  "aws_user_pools_id": "user_pool_id",
  "aws_user_pools_web_client_id": "web_client_id",
  "oauth": {
    "domain": "example.amazoncognito.com",
    "scope": [
      "aws.cognito.signin.user.admin",
      "email",
      "openid",
      "phone",
      "profile"
    ],
    "redirectSignIn": "myapp://callback/",
    "redirectSignOut": "myapp://signout/",
    "responseType": "code"
  },
  "federationTarget": "COGNITO_USER_AND_IDENTITY_POOLS",
  "aws_cognito_username_attributes": [
    "EMAIL"
  ],
  "aws_cognito_social_providers": [
    "FACEBOOK",
    "GOOGLE"
  ],
  "aws_cognito_signup_attributes": [],
  "aws_cognito_mfa_configuration": "OFF",
  "aws_cognito_mfa_types": [],
  "aws_cognito_password_protection_settings": {
    "passwordPolicyMinLength": 8,
    "passwordPolicyCharacters": []
  },
  "aws_cognito_verification_mechanisms": [
    "EMAIL",
    "PHONE_NUMBER"
  ]
}
angular amazon-cognito aws-amplify server-side-rendering angular-ssr
1个回答
0
投票

@john 你能告诉我运行 amplify.init 的步骤吗?

我的 amplifyconfiguration.json 文件仅包含 1 行代码。

© www.soinside.com 2019 - 2024. All rights reserved.