Maison  >  Article  >  interface Web  >  [Résolu] Rôle utilisateur Appwrite manquant ou erreurs de portée manquantes

[Résolu] Rôle utilisateur Appwrite manquant ou erreurs de portée manquantes

Patricia Arquette
Patricia Arquetteoriginal
2024-10-09 10:53:02780parcourir

[Solved] Appwrite user role missing or missing scope errors

Appwrite est un outil génial à utiliser si vous souhaitez créer des applications rapidement, mais vous pouvez parfois rencontrer des erreurs qui peuvent être frustrantes et pour moi, ces erreurs concernaient toujours le "Rôle utilisateur manquant" ou "utilisateur non autorisé à faire cela", etc. Même si j'ai un accès complet à toute instance de mon application faisant quoi que ce soit.

Mais finalement j'ai trouvé un moyen de tous les réparer (enfin peut-être pas tous mais j'aimerais le penser).

Donc, ce post sur Discord l'a expliqué de manière très subtile.

Le problème est de vous assurer qu'il y a une session en utilisant l'une de ces méthodes, je veux dire celle que vous utilisez dans votre projet.

  • créerune session anonyme
  • créerEmailPasswordSession
  • créerOAuth2Session
  • créer une session

Permettez-moi de vous donner un exemple où j'ai rencontré cette erreur, cela pourrait être plus clair.

J'avais une page d'inscription et ce que je veux faire, c'est que dès que l'utilisateur clique sur créer un compte ou s'inscrire, cela devrait déclencher un e-mail de vérification, mais j'obtenais l'erreur indiquant que l'utilisateur n'est pas autorisé. La solution était de créer une session avant de déclencher l'e-mail, alors voyez le code suivant comment je crée une session avant de déclencher l'e-mail :

"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>
  );
}

Ceci est juste un exemple qui décrit quel était le comportement prévu, ce qui se passait et ce qui était censé être fait.

Je voulais juste le partager au cas où de nouveaux débutants dans Appwrite comme moi seraient confrontés à cette erreur. Dans l'ensemble, j'ai constaté que presque dans tous les cas, lorsque j'obtiens des erreurs de portée ou des erreurs d'utilisateur non autorisé, la création d'une session ou au moins le fait de m'assurer qu'une session existe avant d'appeler cette méthode résolvent ces problèmes. Alors essayez-les et dites-moi ce qui se passe

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn