


Membina Papan Pemuka Pekerja Selamat dengan Pengesahan Muka: Tutorial Komprehensif Next.js
Adakah anda bersedia untuk merevolusikan pengurusan tempat kerja anda? Dalam tutorial komprehensif ini, kami menyelami lebih dalam untuk mencipta papan pemuka pekerja terkini yang memanfaatkan pengesahan muka. Kami akan menggunakan beberapa alatan paling hangat dalam pembangunan web: Next.js, FACEIO dan Shadcn UI. Pada penghujung panduan ini, anda akan mempunyai papan pemuka yang kemas dan selamat yang akan membuatkan pekerja anda berasa seperti mereka akan hidup pada masa hadapan!
Perkara yang Anda Perlukan Sebelum Kami Bermula
Sebelum kami menyelam, mari pastikan anda mempunyai semua itik anda berturut-turut:
- Node.js dipasang pada mesin anda
- npm atau benang (yang mana mengapungkan bot anda)
Dapatkan semua itu? Hebat! Jom tayangkan persembahan ini di jalan raya.
Menyediakan Projek Anda: Langkah Pertama
Langkah 1: Memulakan Projek Next.js Anda
Perkara pertama dahulu, mari buat projek Next.js kami. Buka terminal anda dan taip perkataan ajaib ini:
npx create-next-app@latest faceio-app cd faceio-app
Anda akan ditanya beberapa soalan. Begini cara menjawabnya:
- Skrip Jenis? Heck ya!
- ESLint? Sudah tentu!
- Css Tailwind? Anda bertaruh!
- src/ direktori? Nah, kami baik.
- Penghala Apl? Ya, sila!
- Sesuaikan alias import lalai? Kami akan meneruskan yang ini.
Langkah 2: Mengumpul Alat Anda
Sekarang, jom dapatkan semua barang yang kami perlukan. Jalankan arahan ini untuk memasang kebergantungan kami:
npm install @faceio/fiojs @shadcn/ui class-variance-authority clsx tailwind-merge
Langkah 3: Sediakan Sos Rahsia Anda
Buat fail bernama .env.local dalam akar projek anda. Di sinilah kami akan menyimpan ID apl FACEIO rahsia kami:
NEXT_PUBLIC_FACEIO_APP_ID=your-super-secret-faceio-app-id
Ingat untuk menggantikan 'id-faceio-app-id-super-rahsia anda' dengan ID aplikasi FACEIO anda yang sebenar. Pastikan ia selamat!
Langkah 4: Struktur Fail
Struktur projek anda sepatutnya kelihatan seperti ini:
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
Langkah 5: Sprucing Up Tailwind CSS
Masa untuk memberi Tailwind ubah suai. Kemas kini fail tailwind.config.js anda dengan konfigurasi mewah ini:
/** @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")], }
Membina Hati Papan Pemuka Anda
Langkah 1: Menghasilkan Komponen FaceAuth
Mari kita cipta bintang rancangan kami - komponen FaceAuth. Buat apl/komponen/FaceAuth.tsx fail baharu dan tampal dalam kod ini:
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;
Langkah 2: Membina Komponen Papan Pemuka Pekerja
Sekarang, mari buat papan pemuka yang akan dilihat oleh pekerja kami. Buat apl/komponen/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;
Langkah 3: Menyatukan Semuanya
Akhir sekali, mari kemas kini halaman utama kami untuk menunjukkan kerja keras kami. Kemas kini apl/page.tsx:
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> ); }
Sekarang, mari kita sediakan reka letak yang akan membungkus keseluruhan apl kita. Tambahkan kod ini: 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>© 2024 Faceio . All rights reserved.</p> </footer> </body> </html> ) }
Reka letak ini seperti bingkai rumah - ia menyediakan struktur untuk keseluruhan apl anda. Ia termasuk pengepala dengan nama syarikat anda, kawasan kandungan utama tempat papan pemuka anda akan dipaparkan dan pengaki. Selain itu, ia menyediakan beberapa keajaiban SEO dengan metadata!
Privasi Utama dan Amalan Keselamatan untuk Integrasi FACEIO
Privasi oleh Reka Bentuk
- Gunakan kawalan akses, persetujuan pengguna dan pilihan menarik diri untuk melindungi privasi.
Persetujuan Bermakna
- Pastikan pengguna mengetahui pengumpulan data.
- Tawarkan kebebasan memilih dan kawalan ke atas data mereka.
- Benarkan pembatalan persetujuan dan pemadaman data pada bila-bila masa.
Amalan Terbaik
- Dapatkan persetujuan yang jelas dan sewajarnya, terutamanya untuk kanak-kanak bawah umur.
- Jadikan permintaan persetujuan mudah dicari dan difahami.
- Elakkan pendaftaran automatik dan pendaftaran tanpa kebenaran.
- Beritahu pengguna sebelum mengumpul data biometrik.
- Ikuti keperluan privasi data undang-undang.
Keselamatan Data
- Padamkan data pengguna selepas pemadaman akaun.
- Kekalkan pengekalan data dan amalan pelupusan yang kukuh.
- Melaksanakan dan menyemak perlindungan keselamatan dengan kerap.
Untuk butiran lanjut, rujuk Amalan Terbaik FACEIO.
Pertimbangan Keselamatan Utama untuk Integrasi FACEIO
Keselamatan mengikut Reka Bentuk
- Keselamatan aplikasi adalah penting untuk memelihara kepercayaan pengguna.
- Ikuti amalan terbaik keselamatan FACEIO untuk mengurangkan risiko.
Ciri Keselamatan Teras
-
Tolak PIN Lemah
- Halang PIN lemah seperti 0000 atau 1234.
- Lalai: Tidak.
-
Halang Pendaftaran Pendua
- Menghalang pengguna daripada mendaftar beberapa kali.
- Lalai: Tidak.
-
Lindungi Terhadap Pemalsuan Dalam
- Mengesan dan menyekat percubaan menipu.
- Lalai: Tidak.
-
Haramkan Pendaftaran Kecil
- Sekat pengguna bawah 18 tahun daripada mendaftar.
- Lalai: Tidak.
-
Memerlukan PIN untuk Pengesahan
- Memerlukan kod PIN untuk setiap pengesahan.
- Lalai: Ya.
-
Kuatkuasakan PIN Unik
- Memastikan setiap PIN pengguna adalah unik.
- Lalai: Tidak.
-
Abaikan Wajah Kabur
- Buang muka di bawah pencahayaan yang kurang baik atau separa bertopeng.
- Lalai: Ya.
-
Tolak Pengepala Hilang
- Menyekat instantiasi tanpa pengepala HTTP yang betul.
- Lalai: Ya.
-
Hadkan Semerta
- Had kepada domain dan negara tertentu.
- Lalai: Tidak.
-
Dayakan Webhooks
- Memberitahu bahagian belakang anda tentang acara FACEIO.
- Lalai: Tidak.
Untuk butiran lanjut, rujuk Amalan Terbaik Keselamatan FACEIO.
Aplikasi Dunia Nyata: Di Mana Anda Boleh Menggunakan Ini?
Memandangkan kami telah membina papan pemuka yang hebat ini, anda mungkin tertanya-tanya, "Di manakah saya boleh menggunakan ini di dunia nyata?" Baiklah, saya beritahu anda, kemungkinannya tidak berkesudahan! Berikut ialah beberapa idea:
Pengurusan Pejabat: Ucapkan selamat tinggal kepada kad tebuk sekolah lama! Sistem ini boleh merevolusikan cara anda menjejaki kehadiran, mengawal akses ke kawasan berlainan di pejabat anda dan mengurus maklumat pekerja.
Sistem Keselamatan: Bayangkan dunia di mana pejabat anda adalah Fort Knox, tetapi tanpa kerumitan. Sistem pengecaman muka ini boleh menjadi asas kepada protokol keselamatan yang teguh.
Kiosk Perkhidmatan Pelanggan: Bayangkan ini - pelanggan berjalan ke kios, ia mengenali mereka serta-merta dan menyediakan perkhidmatan yang diperibadikan. Ia bukan fiksyen sains lagi!
Apa Seterusnya? Langit adalah Hadnya!
Tahniah, ahli sihir teknologi! Anda baru sahaja membina papan pemuka pekerja yang canggih dengan pengesahan muka. Tetapi mengapa berhenti di sini? Keindahan sistem ini ialah fleksibilitinya. Berikut ialah beberapa idea untuk membawanya ke peringkat seterusnya:
- Laksanakan pemberitahuan masa nyata untuk kemas kini penting
- Tambah ciri pelaporan terperinci untuk HR
- Sepadukan dengan sistem lain seperti senarai gaji atau alatan pengurusan projek
Ingat, dalam dunia teknologi, satu-satunya had adalah imaginasi anda (dan mungkin pengambilan kafein anda).
Jadi, apa pendapat anda? Adakah anda bersedia untuk membawa tempat kerja anda ke masa hadapan? Cuba projek ini dan beritahu saya bagaimana ia berjalan. Saya ingin mendengar tentang pengalaman anda, sebarang ciri hebat yang anda tambahkan atau sebarang cabaran yang anda hadapi sepanjang perjalanan.
Selamat pengekodan, dan semoga pengecaman wajah anda tidak pernah salah mengira anda sebagai kilang pejabat anda!
Atas ialah kandungan terperinci Membina Papan Pemuka Pekerja Selamat dengan Pengesahan Muka: Tutorial Komprehensif Next.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

Python lebih sesuai untuk sains data dan automasi, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python berfungsi dengan baik dalam sains data dan pembelajaran mesin, menggunakan perpustakaan seperti numpy dan panda untuk pemprosesan data dan pemodelan. 2. Python adalah ringkas dan cekap dalam automasi dan skrip. 3. JavaScript sangat diperlukan dalam pembangunan front-end dan digunakan untuk membina laman web dinamik dan aplikasi satu halaman. 4. JavaScript memainkan peranan dalam pembangunan back-end melalui Node.js dan menyokong pembangunan stack penuh.
