【发布时间】:2021-10-13 18:02:43
【问题描述】:
我无法从 Amplify 的 API Graphql 访问数据,并且一直返回
Server Error
Error: No current user
我一直在关注这个教程:https://youtu.be/13nYLmjZ0Ys?t=2292
我知道我已登录 Amplify,因为如果我进入不同的页面,我可以获取用户身份验证,甚至可以显示 SignOut 按钮。但无论出于何种原因,我不确定为什么会出现此错误
import { API } from "aws-amplify";
import { useRouter } from "next/router";
import { listActivations, getActivation } from "../../graphql/queries";
const Activation = ({ activation }) => {
const router = useRouter();
if (router.isFallback) {
return <div>Loading</div>;
}
return <div>{activation.title}</div>;
};
export default Activation;
export async function getStaticPaths() {
const SSR = withSSRContext();
console.log("static paths");
const activationData = await SSR.API.graphql({
query: listActivations,
});
console.log("activationData", activationData);
const paths = activationData.data.listActivations.items.map((activation) => ({
params: { id: activation.id },
}));
return {
paths,
fallback: true,
};
}
export async function getStaticProps({ params }) {
const SSR = withSSRContext(); // added SSR, but still getting error
console.log("static props");
const { id } = params;
const activationData = await SSR.API.graphql({
query: getActivation,
variables: { id },
});
return {
props: {
activation: activationData.data.getActivation,
},
};
}
出现控制台日志static paths,然后出现错误。
您认为这与我的 GraphQL 架构有关吗?
type User @model @auth(rules: [{ allow: owner, ownerField: "username" }]) {
id: ID!
username: String!
email: String!
userType: UserType
}
type Activation
@model
@key(
name: "activationsByStudentId"
fields: ["student"]
queryField: "activationsByStudentId"
)
@auth(
rules: [
{ allow: groups, groups: ["Admin"] }
{ allow: owner }
{
allow: owner
ownerField: "studentId"
operations: [create, update, delete]
}
{ allow: private, operations: [read] }
{ allow: public, operations: [read] }
]
) {
id: ID!
studentId: ID!
title: String!
student: Student @connection(fields: ["studentId"])
teachers: [TeachersActivations] @connection(name: "ActivationTeachers")
}
编辑:我还添加了用户模型,看看这是否也是一个原因。
【问题讨论】:
-
我不熟悉 Amplify。无论如何,
getStaticProps与静态生成一起使用,即。它在构建时调用。您可以在运行时登录 Amplify,但不会影响任何静态数据获取。 -
@Riwen 当然可以,但是“没有当前用户”是什么意思?我什至正在学习 Amplify 本身的教程:docs.amplify.aws/start/getting-started/data-model/q/integration/…
标签: reactjs graphql next.js aws-amplify aws-appsync