Heim  >  Artikel  >  Web-Frontend  >  Erstellen eines sicheren Mitarbeiter-Dashboards mit Gesichtsauthentifizierung: Ein umfassendes Next.js-Tutorial

Erstellen eines sicheren Mitarbeiter-Dashboards mit Gesichtsauthentifizierung: Ein umfassendes Next.js-Tutorial

WBOY
WBOYOriginal
2024-07-18 18:16:41646Durchsuche

Sind Sie bereit, Ihr Arbeitsplatzmanagement zu revolutionieren? In diesem umfassenden Tutorial befassen wir uns eingehend mit der Erstellung eines hochmodernen Mitarbeiter-Dashboards, das die Gesichtsauthentifizierung nutzt. Wir werden einige der angesagtesten Tools in der Webentwicklung verwenden: Next.js, FACEIO und Shadcn UI. Am Ende dieses Leitfadens verfügen Sie über ein elegantes, sicheres Dashboard, das Ihren Mitarbeitern das Gefühl gibt, in der Zukunft zu leben!

Was Sie benötigen, bevor wir beginnen

Bevor wir eintauchen, stellen wir sicher, dass Sie alle Enten in einer Reihe haben:

  • Node.js auf Ihrem Computer installiert
  • npm oder Garn (je nachdem, was Ihnen gefällt)

Hast du das alles? Großartig! Bringen wir diese Show auf die Straße.

Faceio Authentication

Einrichten Ihres Projekts: Die ersten Schritte

Schritt 1: Starten Sie Ihr Next.js-Projekt

Das Wichtigste zuerst: Erstellen wir unser Next.js-Projekt. Öffnen Sie Ihr Terminal und geben Sie diese Zauberwörter ein:

npx create-next-app@latest faceio-app
cd faceio-app

Ihnen werden einige Fragen gestellt. So beantworten Sie sie:

  • TypeScript? Verdammt ja!
  • ESLint? Absolut!
  • Tailwind CSS? Darauf können Sie wetten!
  • src/-Verzeichnis? Nein, wir sind gut.
  • App-Router? Ja, bitte!
  • Standard-Importalias anpassen? Das geben wir weiter.

Schritt 2: Sammeln Sie Ihre Werkzeuge

Jetzt schnappen wir uns alle Leckereien, die wir brauchen. Führen Sie diesen Befehl aus, um unsere Abhängigkeiten zu installieren:

npm install @faceio/fiojs @shadcn/ui class-variance-authority clsx tailwind-merge

Schritt 3: Bereiten Sie Ihre geheime Soße vor

Erstellen Sie eine Datei mit dem Namen .env.local im Stammverzeichnis Ihres Projekts. Hier bewahren wir unsere geheime FACEIO-App-ID auf:

NEXT_PUBLIC_FACEIO_APP_ID=your-super-secret-faceio-app-id

Denken Sie daran, „Ihre-supergeheime-Faceio-App-ID“ durch Ihre tatsächliche FACEIO-Anwendungs-ID zu ersetzen. Bewahren Sie es sicher auf!

Schritt 4: Dateistruktur

Ihre Projektstruktur sollte wie folgt aussehen:

faceio-app/
├── app/
│   ├── layout.tsx
│   ├── page.tsx
│   └── components/
│       ├── FaceAuth.tsx
│       └── EmployeeDashboard.tsx
├── public/
├── .env.local
├── next.config.js
├── package.json
├── tsconfig.json
└── tailwind.config.js

Schritt 5: Tailwind CSS auf Vordermann bringen

Zeit, Tailwind neu zu gestalten. Aktualisieren Sie Ihre tailwind.config.js-Datei mit dieser ausgefallenen Konfiguration:

/** @type {import('tailwindcss').Config} */
module.exports = {
  darkMode: ["class"],
  content: [
    './app/**/*.{ts,tsx}',
  ],
  theme: {
    container: {
      center: true,
      padding: "2rem",
      screens: {
        "2xl": "1400px",
      },
    },
    extend: {
      colors: {
        border: "hsl(var(--border))",
        input: "hsl(var(--input))",
        ring: "hsl(var(--ring))",
        background: "hsl(var(--background))",
        foreground: "hsl(var(--foreground))",
        primary: {
          DEFAULT: "hsl(var(--primary))",
          foreground: "hsl(var(--primary-foreground))",
        },
        secondary: {
          DEFAULT: "hsl(var(--secondary))",
          foreground: "hsl(var(--secondary-foreground))",
        },
        destructive: {
          DEFAULT: "hsl(var(--destructive))",
          foreground: "hsl(var(--destructive-foreground))",
        },
        muted: {
          DEFAULT: "hsl(var(--muted))",
          foreground: "hsl(var(--muted-foreground))",
        },
        accent: {
          DEFAULT: "hsl(var(--accent))",
          foreground: "hsl(var(--accent-foreground))",
        },
        popover: {
          DEFAULT: "hsl(var(--popover))",
          foreground: "hsl(var(--popover-foreground))",
        },
        card: {
          DEFAULT: "hsl(var(--card))",
          foreground: "hsl(var(--card-foreground))",
        },
      },
      borderRadius: {
        lg: "var(--radius)",
        md: "calc(var(--radius) - 2px)",
        sm: "calc(var(--radius) - 4px)",
      },
      keyframes: {
        "accordion-down": {
          from: { height: 0 },
          to: { height: "var(--radix-accordion-content-height)" },
        },
        "accordion-up": {
          from: { height: "var(--radix-accordion-content-height)" },
          to: { height: 0 },
        },
      },
      animation: {
        "accordion-down": "accordion-down 0.2s ease-out",
        "accordion-up": "accordion-up 0.2s ease-out",
      },
    },
  },
  plugins: [require("tailwindcss-animate")],
}

Bauen Sie das Herzstück Ihres Dashboards auf

Schritt 1: Erstellen der FaceAuth-Komponente

Lassen Sie uns den Star unserer Show erstellen – die FaceAuth-Komponente. Erstellen Sie eine neue Datei app/components/FaceAuth.tsx und fügen Sie diesen Code ein:

import { useEffect } from 'react';
import faceIO from '@faceio/fiojs';
import { Button, Card, CardHeader, CardTitle, CardContent } from '@shadcn/ui';
import { useToast } from '@shadcn/ui';

interface FaceAuthProps {
  onSuccessfulAuth: (data: any) => void;
}

const FaceAuth: React.FC<FaceAuthProps> = ({ onSuccessfulAuth }) => {
  const { toast } = useToast();

  useEffect(() => {
    const faceio = new faceIO(process.env.NEXT_PUBLIC_FACEIO_APP_ID);

    const enrollNewUser = async () => {
      try {
        const userInfo = await faceio.enroll({
          locale: 'auto',
          payload: {
            email: 'employee@example.com',
            pin: '12345',
          },
        });
        toast({
          title: "Success!",
          description: "You're now enrolled in the facial recognition system!",
        });
        console.log('User Enrolled!', userInfo);
      } catch (errCode) {
        toast({
          title: "Oops!",
          description: "Enrollment failed. Please try again.",
          variant: "destructive",
        });
        console.error('Enrollment Failed', errCode);
      }
    };

    const authenticateUser = async () => {
      try {
        const userData = await faceio.authenticate();
        toast({
          title: "Welcome back!",
          description: "Authentication successful.",
        });
        console.log('User Authenticated!', userData);
        onSuccessfulAuth({
          name: 'John Doe',
          position: 'Software Developer',
          department: 'Engineering',
          photoUrl: 'https://example.com/john-doe.jpg',
        });
      } catch (errCode) {
        toast({
          title: "Authentication failed",
          description: "Please try again or enroll.",
          variant: "destructive",
        });
        console.error('Authentication Failed', errCode);
      }
    };

    const enrollBtn = document.getElementById('enroll-btn');
    const authBtn = document.getElementById('auth-btn');

    if (enrollBtn) enrollBtn.onclick = enrollNewUser;
    if (authBtn) authBtn.onclick = authenticateUser;

    return () => {
      if (enrollBtn) enrollBtn.onclick = null;
      if (authBtn) authBtn.onclick = null;
    };
  }, [toast, onSuccessfulAuth]);

  return (
    <Card className="w-full max-w-md mx-auto">
      <CardHeader>
        <CardTitle>Facial Authentication</CardTitle>
      </CardHeader>
      <CardContent className="space-y-4">
        <Button id="enroll-btn" variant="outline" className="w-full">
          Enroll New Employee
        </Button>
        <Button id="auth-btn" variant="default" className="w-full">
          Authenticate
        </Button>
      </CardContent>
    </Card>
  );
};

export default FaceAuth;

Schritt 2: Erstellen der EmployeeDashboard-Komponente

Jetzt erstellen wir das Dashboard, das unsere Mitarbeiter sehen werden. Erstellen Sie app/components/EmployeeDashboard.tsx:

import { useState } from 'react';
import { Card, CardHeader, CardTitle, CardContent } from '@shadcn/ui';
import { Button, Avatar, Badge, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@shadcn/ui';
import FaceAuth from './FaceAuth';

interface EmployeeData {
  name: string;
  position: string;
  department: string;
  photoUrl: string;
}

const EmployeeDashboard: React.FC = () => {
  const [isAuthenticated, setIsAuthenticated] = useState(false);
  const [employeeData, setEmployeeData] = useState<EmployeeData | null>(null);

  const handleSuccessfulAuth = (data: EmployeeData) => {
    setIsAuthenticated(true);
    setEmployeeData(data);
  };

  const mockAttendanceData = [
    { date: '2024-07-14', timeIn: '09:00 AM', timeOut: '05:30 PM' },
    { date: '2024-07-13', timeIn: '08:55 AM', timeOut: '05:25 PM' },
    { date: '2024-07-12', timeIn: '09:05 AM', timeOut: '05:35 PM' },
  ];

  return (
    <div className="space-y-6">
      {!isAuthenticated ? (
        <FaceAuth onSuccessfulAuth={handleSuccessfulAuth} />
      ) : (
        <>
          <Card>
            <CardHeader>
              <CardTitle>Employee Profile</CardTitle>
            </CardHeader>
            <CardContent className="flex items-center space-x-4">
              <Avatar className="h-20 w-20" src={employeeData?.photoUrl} alt={employeeData?.name} />
              <div>
                <h2 className="text-2xl font-bold">{employeeData?.name}</h2>
                <p className="text-gray-500">{employeeData?.position}</p>
                <Badge variant="outline">{employeeData?.department}</Badge>
              </div>
            </CardContent>
          </Card>

          <Card>
            <CardHeader>
              <CardTitle>Quick Actions</CardTitle>
            </CardHeader>
            <CardContent className="space-y-4">
              <Button className="w-full">Check-in</Button>
              <Button className="w-full" variant="secondary">Request Leave</Button>
            </CardContent>
          </Card>

          <Card>
            <CardHeader>
              <CardTitle>Attendance Records</CardTitle>
            </CardHeader>
            <CardContent>
              <Table>
                <TableHeader>
                  <TableRow>
                    <TableHead>Date</TableHead>
                    <TableHead>Time In</TableHead>
                    <TableHead>Time Out</TableHead>
                  </TableRow>
                </TableHeader>
                <TableBody>
                  {mockAttendanceData.map((record, index) => (
                    <TableRow key={index}>
                      <TableCell>{record.date}</TableCell>
                      <TableCell>{record.timeIn}</TableCell>
                      <TableCell>{record.timeOut}</TableCell>
                    </TableRow>
                  ))}
                </TableBody>
              </Table>
            </CardContent>
          </Card>
        </>
      )}
    </div>
  );
};

export default EmployeeDashboard;

Schritt 3: Alles zusammenbringen

Lasst uns abschließend unsere Hauptseite aktualisieren, um unsere harte Arbeit zu präsentieren. App/page.tsx aktualisieren:

import EmployeeDashboard from './components/EmployeeDashboard';

export default function Home() {
  return (
    <main className="flex min-h-screen flex-col items-center justify-center p-4">
      <EmployeeDashboard />
    </main>
  );
}

Jetzt richten wir das Layout ein, das unsere gesamte App umschließt. Fügen Sie diesen Code hinzu: app/layout.tsx

import './globals.css'
import type { Metadata } from 'next'
import { Inter } from 'next/font/google'

const inter = Inter({ subsets: ['latin'] })

export const metadata: Metadata = {
  title: 'Employee Dashboard with Facial Authentication',
  description: 'A cutting-edge employee dashboard featuring facial recognition for secure authentication and efficient workplace management.',
}

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en">
      <body className={inter.className}>
        <header className="bg-primary text-white p-4">
          <h1 className="text-2xl font-bold">Faceio Solutions</h1>
        </header>
        <main className="container mx-auto p-4">
          {children}
        </main>
        <footer className="bg-gray-100 text-center p-4 mt-8">
          <p>&copy; 2024 Faceio . All rights reserved.</p>
        </footer>
      </body>
    </html>
  )
}

Dieses Layout ist wie der Rahmen eines Hauses – es bietet Struktur für Ihre gesamte App. Es enthält eine Kopfzeile mit Ihrem Firmennamen, einen Hauptinhaltsbereich, in dem Ihr Dashboard angezeigt wird, und eine Fußzeile. Außerdem sorgt es mit Metadaten für etwas SEO-Magie!

Wichtige Datenschutz- und Sicherheitspraktiken für die FACEIO-Integration

Datenschutz durch Design

  • Verwenden Sie Zugriffskontrollen, Benutzereinwilligungen und Opt-out-Optionen, um die Privatsphäre zu schützen.

Sinnvolle Einwilligung

  • Stellen Sie sicher, dass Benutzer über die Datenerfassung informiert sind.
  • Bieten Sie Wahlfreiheit und Kontrolle über Ihre Daten.
  • Widerruf der Einwilligung und Datenlöschung jederzeit möglich.

Best Practices

  • Holen Sie eine klare und angemessene Einwilligung ein, insbesondere bei Minderjährigen.
  • Machen Sie Einwilligungsanfragen leicht auffindbar und verständlich.
  • Vermeiden Sie die automatische Registrierung und nicht autorisierte Registrierungen.
  • Benachrichtigen Sie Benutzer, bevor Sie biometrische Daten erfassen.
  • Befolgen Sie die gesetzlichen Datenschutzbestimmungen.

Datensicherheit

  • Benutzerdaten beim Löschen des Kontos löschen.
  • Sorgen Sie für strenge Datenaufbewahrungs- und -entsorgungspraktiken.
  • Sicherheitsmaßnahmen regelmäßig implementieren und überprüfen.

Weitere Informationen finden Sie unter FACEIO Best Practices.

Wichtige Sicherheitsüberlegungen für die FACEIO-Integration

Sicherheit durch Design

  • Anwendungssicherheit ist wichtig, um das Vertrauen der Benutzer zu wahren.
  • Befolgen Sie die bewährten Sicherheitspraktiken von FACEIO, um Risiken zu mindern.

Kernsicherheitsfunktionen

  1. Schwache PINs ablehnen

    • Verhindern Sie schwache PINs wie 0000 oder 1234.
    • Standard: Nein.
  2. Doppelte Anmeldungen verhindern

    • Verhindert, dass sich Benutzer mehrmals registrieren.
    • Standard: Nein.
  3. Schutz vor Deep-Fakes

    • Erkennt und blockiert Spoofing-Versuche.
    • Standard: Nein.
  4. Minderjährige Einschreibungen verbieten

    • Blockiert die Anmeldung für Benutzer unter 18 Jahren.
    • Standard: Nein.
  5. PIN zur Authentifizierung erforderlich

    • Für jede Authentifizierung ist ein PIN-Code erforderlich.
    • Standard: Ja.
  6. Eindeutige PINs erzwingen

    • Stellt sicher, dass die PIN jedes Benutzers eindeutig ist.
    • Standard: Nein.
  7. Verdeckte Gesichter ignorieren

    • Gesichter werden bei schlechten Lichtverhältnissen oder teilweise maskiert verworfen.
    • Standard: Ja.
  8. Fehlende Header ablehnen

    • Blockiert die Instanziierung ohne ordnungsgemäße HTTP-Header.
    • Standard: Ja.
  9. Instanziierung einschränken

    • Beschränkungen auf bestimmte Domains und Länder.
    • Standard: Nein.
  10. Webhooks aktivieren

    • Benachrichtigt Ihr Backend über FACEIO-Ereignisse.
    • Standard: Nein.

Weitere Informationen finden Sie unter FACEIO Security Best Practices.

Praxisnahe Anwendungen: Wo können Sie das nutzen?

Nachdem wir dieses tolle Dashboard erstellt haben, fragen Sie sich vielleicht: „Wo kann ich es in der realen Welt verwenden?“ Nun, lassen Sie mich Ihnen sagen, die Möglichkeiten sind endlos! Hier nur ein paar Ideen:

  1. Büromanagement: Verabschieden Sie sich von Lochkarten der alten Schule! Dieses System kann die Art und Weise revolutionieren, wie Sie die Anwesenheit verfolgen, den Zugang zu verschiedenen Bereichen Ihres Büros kontrollieren und Mitarbeiterinformationen verwalten.

  2. Sicherheitssysteme: Stellen Sie sich eine Welt vor, in der Ihr Büro Fort Knox ist, aber ohne Hektik. Dieses Gesichtserkennungssystem kann der Grundstein für ein robustes Sicherheitsprotokoll sein.

  3. Kundendienstkioske: Stellen Sie sich Folgendes vor: Ein Kunde geht zu einem Kiosk, er erkennt ihn sofort und bietet personalisierten Service. Es ist keine Science-Fiction mehr!

Was kommt als nächstes? Der Himmel ist die Grenze!

Herzlichen Glückwunsch, Tech-Zauberer! Sie haben gerade ein hochmodernes Mitarbeiter-Dashboard mit Gesichtsauthentifizierung erstellt. Aber warum hier aufhören? Das Schöne an diesem System ist seine Flexibilität. Hier sind einige Ideen, um es auf die nächste Stufe zu bringen:

  • Implementieren Sie Echtzeitbenachrichtigungen für wichtige Updates
  • Fügen Sie detaillierte Berichtsfunktionen für die Personalabteilung hinzu
  • Integration mit anderen Systemen wie Gehaltsabrechnungs- oder Projektmanagement-Tools

Denken Sie daran, dass in der Welt der Technik die einzige Grenze Ihre Vorstellungskraft ist (und vielleicht auch Ihre Koffeinaufnahme).

Also, was denkst du? Sind Sie bereit, Ihren Arbeitsplatz in die Zukunft zu bringen? Probieren Sie dieses Projekt aus und lassen Sie mich wissen, wie es läuft. Ich würde gerne von Ihren Erfahrungen hören, von den coolen Funktionen, die Sie hinzufügen, oder von den Herausforderungen, denen Sie auf dem Weg begegnen.

Viel Spaß beim Programmieren und möge Ihre Gesichtserkennung Sie nie mit Ihrer Büropflanze verwechseln!

Das obige ist der detaillierte Inhalt vonErstellen eines sicheren Mitarbeiter-Dashboards mit Gesichtsauthentifizierung: Ein umfassendes Next.js-Tutorial. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn