ホームページ >ウェブフロントエンド >jsチュートリアル >[解決済み] Appwrite ユーザー ロールが見つからない、またはスコープが見つからないエラー

[解決済み] Appwrite ユーザー ロールが見つからない、またはスコープが見つからないエラー

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-09 10:53:02934ブラウズ

[Solved] Appwrite user role missing or missing scope errors

Appwrite は、アプリケーションを迅速に構築したい場合に使用できる素晴らしいツールですが、イライラするようなエラーに遭遇することがあります。私の場合、それらのエラーは常に「ユーザー ロールが欠落しています」または「ユーザーにこれを行う権限がありません」など。アプリのインスタンスへの完全なアクセス権を持っていても、何かを行うことができます。

しかし、最終的にそれらをすべて修正する方法を見つけました (すべてではないかもしれませんが、そう思いたいと思います)。

この Discord の投稿では、実際に非常に微妙な方法で説明しています。

問題は、これらのメソッドのいずれかを使用して、セッションが存在することを確認することです。

  • 匿名セッションの作成
  • createEmailPasswordSession
  • OAuth2Session の作成
  • セッションの作成

私がこのエラーに直面した例を示します。そうすれば、より明確になるかもしれません。

サインアップページがあり、ユーザーがアカウントの作成またはサインアップをクリックするとすぐに確認メールがトリガーされるはずですが、ユーザーが承認されていないというエラーが発生しました。解決策は、電子メールをトリガーする前にセッションを作成することでした。そのため、電子メールをトリガーする前にセッションを作成する方法を次のコードを参照してください。

"use client";

import Link from "next/link";
import { FormEvent } from "react";
import { Button } from "@/components/ui/button";
import {
  Card,
  CardContent,
  CardDescription,
  CardHeader,
  CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { createAuthAccount } from "@/app/appwrite/createAuthAccount";
import { createLoginSession } from "@/app/appwrite/createLoginSession";
import { useRouter } from "next/navigation";
import { sendVerificationEmail } from "@/app/appwrite/sendVerificationEmail";

export const description =
  "A sign up form with first name, last name, email and password inside a card. There's an option to sign up with GitHub and a link to login if you already have an account";

export default function LoginForm() {
  const router = useRouter();
  const signUpFormHandler = async (event: FormEvent) => {
    event.preventDefault();
    const formData = new FormData(event.target as HTMLFormElement);
    const data = Object.fromEntries(formData.entries());
    const createdAccount = await createAuthAccount({
      email: data?.email.toString(),
      password: data?.password.toString(),
      name: data?.["full-name"].toString(),
    });
    if (createdAccount?.$id) {
      await createLoginSession({
        email: data?.email.toString(),
        password: data?.password.toString(),
      });
      await sendVerificationEmail();
    }
  };

  return (
    <Card className="mx-auto max-w-sm">
      <CardHeader>
        <CardTitle className="text-xl">Sign Up</CardTitle>
        <CardDescription>
          Enter your information to create an account
        </CardDescription>
      </CardHeader>
      <CardContent>
        <form onSubmit={signUpFormHandler} className="grid gap-4">
          <div className="grid gap-2">
            <Label htmlFor="full-name">Full name</Label>
            <Input name="full-name" id="full-name" placeholder="Max" required />
          </div>
          <div className="grid gap-2">
            <Label htmlFor="email">Email</Label>
            <Input
              id="email"
              type="email"
              placeholder="m@example.com"
              required
              name="email"
            />
          </div>
          <div className="grid gap-2">
            <Label htmlFor="password">Password</Label>
            <Input name="password" id="password" type="password" />
          </div>
          <Button type="submit" className="w-full">
            Create an account
          </Button>
        </form>
        <div className="mt-4 text-center text-sm">
          Already have an account?{" "}
          <Link href="#" className="underline">
            Sign in
          </Link>
        </div>
      </CardContent>
    </Card>
  );
}

これは、意図された動作、何が起こっていて、何が行われると想定されていたかを示す単なる例です。

私のような Appwrite の初心者がこのエラーに直面した場合に備えて、それを共有したいと思いました。全体として、スコープエラーまたはユーザーが許可されていないエラーが発生した場合、ほぼすべての場合、セッションを作成するか、少なくともそのメソッドを呼び出す前にセッションが存在していることを確認することで、それらの問題が解決されることがわかりました。ぜひこれらを試してみて、何が起こるか教えてください

以上が[解決済み] Appwrite ユーザー ロールが見つからない、またはスコープが見つからないエラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。