启用 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"
]
}
@john 你能告诉我运行 amplify.init 的步骤吗?
我的 amplifyconfiguration.json 文件仅包含 1 行代码。