Bezparoles pieteikšanās ieviešana Next.js 13 projektā, izmantojot NextAuth.js un Prisma

bezparoles
nextjs
nextauth
prisma
Pieteikšanās bez paroles vietnē NextJs 13 cover image

Šajā rakstā tiks aplūkotas darbības, kas nepieciešamas, lai ieviestu bezparoles autentifikāciju projektā Next.js, izmantojot NextAuth.js bibliotēku. Turklāt mēs izmantosim Prisma kā mūsu datu bāzes adapteri, lai to panāktu.

Bezparoles autentifikācija ir novatoriska pieeja, kas novērš vajadzību pēc tradicionālajām lietotājvārdu un paroļu kombinācijām. Tā vietā tā piedāvā drošāku un lietotājam draudzīgāku autentifikācijas pieredzi, izmantojot alternatīvas metodes, piemēram, e-pasta burvju saites vai vienreizējus kodus, kas nosūtīti, izmantojot SMS.

Next.js ir populārs React ietvars tīmekļa lietojumprogrammu veidošanai, kas pazīstams ar savu vienkāršību un efektivitāti. Mēs varam viegli iekļaut bezparoles autentifikāciju mūsu projektā, integrējot NextAuth.js — autentifikācijas bibliotēku, kas īpaši paredzēta Next.js.

Turklāt mēs paļausimies uz Prisma kā mūsu datu bāzes adapteri. Prisma ir ORM (Object-Relational Mapping) rīks, kas vienkāršo datu bāzes mijiedarbību, nodrošinot tipam drošu un automātiski ģenerētu vaicājumu veidotāju. Tā atbalsta vairākas datu bāzes, tostarp PostgreSQL, MySQL un SQLite, padarot to par daudzpusīgu izvēli mūsu autentifikācijas ieviešanai.

Šajā rokasgrāmatā mēs sniegsim detalizētus norādījumus par to, kā iestatīt un konfigurēt bezparoles autentifikāciju, izmantojot NextAuth.js Next.js projektā. Mēs arī parādīsim, kā integrēt Prisma kā mūsu datu bāzes adapteri, nodrošinot netraucētu saziņu starp mūsu lietojumprogrammu un datu bāzi.

Tagad mēs izpētīsim, kā uzlabot mūsu Next.js lietojumprogrammas drošību un lietotāja pieredzi, izmantojot bezparoles autentifikāciju un NextAuth.js un Prisma iespējas. Sāksim.

Kas ir bezparoles pieteikšanās?

Bezparoles pieteikšanās, kā norāda nosaukums, ir autentifikācijas metode, kas novērš vajadzību pēc tradicionālām lietotājvārda un paroles kombinācijām. Tā vietā tiek izmantoti alternatīvi līdzekļi lietotāja identitātes pārbaudei, piemēram, e-pasta maģiskas saites vai vienreizēji kodi, kas nosūtīti ar SMS. Šī pieeja piedāvā vairākas priekšrocības salīdzinājumā ar tradicionālajām pieteikšanās metodēm. Pirmkārt, tas novērš ar parolēm saistītu ievainojamību, piemēram, vāju paroļu vai paroļu atkārtotas izmantošanas, risku. Otrkārt, tas vienkāršo lietotāja pieredzi, novēršot nepieciešamību atcerēties un ievadīt sarežģītas paroles.

Lai ieviestu bezparoles pieteikšanos, izmantojot e-pasta burvju saites vai vienreizējos kodus, mums ir nepieciešams SMTP (vienkāršā pasta pārsūtīšanas protokola) serveris.

SMTP serveris ir atbildīgs par e-pasta ziņojumu sūtīšanu internetā. Bezparoles autentifikācijas kontekstā serveris nosūta maģiskās saites vai vienreizējos kodus uz lietotāja reģistrēto e-pasta adresi. Kad lietotājs sāk pieteikšanās procesu, e-pasts ar unikālu saiti vai kodu tiek ģenerēts un nosūtīts lietotājam. Pēc tam lietotājs var noklikšķināt uz saites vai ievadīt kodu, lai pabeigtu autentifikācijas procesu. SMTP serveris darbojas kā starpnieks starp lietojumprogrammu un lietotāja e-pasta pakalpojumu, nodrošinot autentifikācijas ziņojumu drošu un uzticamu piegādi. Izmantojot SMTP serveri, mēs varam efektīvi ieviest bezparoles pieteikšanos un nodrošināt lietotājiem netraucētu autentifikācijas pieredzi.

Sāksim!

Pirmkārt, mums ir jāģenerē jauns Next.js projekts. Lai to izdarītu, izmantojiet šādu komandu:

npx create-next-app@latest

Generating a new NextJS project

Kad esat ģenerējis jaunu Next.js projektu, varat pāriet uz jaunizveidoto projekta direktoriju.

Mainot direktoriju projektā, jūs varēsiet izpētīt dažādas mapes un failus, kas veido Next.js projekta struktūru.

Project Structure

Projekta struktūras izpratne ir būtiska jūsu Next.js lietojumprogrammas efektīvai izstrādei un organizēšanai. Atsaucoties uz oficiālo dokumentāciju, varat izmantot paraugpraksi un gūt ieskatu par to, kā strukturēt savu kodu, pārvaldīt statiskos līdzekļus un izveidot atkārtoti lietojamas sastāvdaļas.

Mūsu atkarību instalēšana

Lai iespējotu bezparoles autentifikāciju mūsu Next.js projektā, izmantojot NextAuth.js, mums vispirms ir jāinstalē vajadzīgās atkarības. Palaidiet komandu 'yarn add next-auth nodemailer', lai mūsu projektam pievienotu gan NextAuth.js, gan nodemailer.

Mēs īpaši izmantojam nodemailer, jo tas ir populārs un daudzpusīgs modulis e-pasta sūtīšanai pakalpojumā Node.js. Tas nodrošina vienkāršu un uzticamu veidu, kā pa e-pastu nosūtīt burvju saites vai vienreizējos kodus, kas nepieciešami autentifikācijai bez paroles.

Tālāk integrēsim Prisma kā mūsu datu bāzes adapteri. Sāciet, instalējot nepieciešamās Prisma pakotnes, izmantojot komandu:

yarn add @prisma/client @next-auth/prisma-adapter

Šīs pakotnes nodrošinās netraucētu saziņu starp mūsu Next.js lietojumprogrammu un datu bāzi. Turklāt mums arī jāinstalē Prisma kā izstrādātāja atkarība, palaižot:

yarn add prisma --dev

Šī darbība nodrošina, ka mums ir nepieciešamie rīki darbam ar Prisma un tās automātiski ģenerēto vaicājumu veidotāju datu bāzes mijiedarbībai.

Instalējot šīs atkarības, mēs savā Next.js projektā izveidojām pamatu bezparoles autentifikācijas ieviešanai, izmantojot NextAuth.js un Prisma.

Uzstādiet Prisma

Lai Next.js projektā izmantotu bezparoles autentifikāciju, ir nepieciešams iestatīt Prisma un piekļūt SMTP serverim e-pasta sūtīšanai. Šī apmācība palīdzēs jums izmantot personīgo Gmail kontu e-pasta ziņojumu sūtīšanai. Lai iestatīšana būtu veiksmīga, veiciet tālāk norādītās darbības.

Vispirms izveidojiet mapi "prisma" sava projekta saknē. Šajā mapē būs ar Prisma saistītie faili un konfigurācijas. Pēc tam mapē "prisma" izveidojiet jaunu failu ar nosaukumu "schema.prisma". Shēmas fails nosaka jūsu datu bāzes struktūru un kalpo kā Prisma automātiski ģenerētā koda projekts.

Ja esat iesācējs shēmas jēdzienā, neuztraucieties! Shēma norāda jūsu datu bāzes tabulas, laukus, relācijas un ierobežojumus. Lai izveidotu shēmu, varat skatīt oficiālo NextAuth.js dokumentāciju un kopēt tur sniegto shēmas piemēru. Šī shēma ir sākumpunkts, un to var pielāgot atbilstoši jūsu lietojumprogrammas prasībām.

Schema file

Pēc tam izveidojiet failu ".env" sava projekta saknē. Šajā failā tiks saglabāti jūsu vides mainīgie, tostarp nepieciešamās konfigurācijas jūsu SMTP serverim. Lai aizpildītu failu “.env”, varat kopēt tālāk norādītās konfigurācijas piemērus. Noteikti ievadiet sava Gmail konta akreditācijas datus un SMTP servera iestatījumus attiecīgajos laukos.

EMAIL_SERVER_USER="YourGmailAddress"
EMAIL_SERVER_PASSWORD="GmailPassOrGeneratedPass"
EMAIL_SERVER_HOST=smtp.gmail.com
EMAIL_SERVER_PORT=587
EMAIL_FROM="noreply@example.com"

NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=ThisNeedsToBeSuperSecret

Veicot šīs darbības, jūs būsiet iestatījis Prisma un konfigurējis SMTP serveri e-pasta ziņojumu sūtīšanai, izmantojot savu Gmail kontu. Šie sagatavošanās darbi ir ļoti svarīgi, lai jūsu Next.js projektā iespējotu bezparoles autentifikācijas plūsmu.

Piezīme

Ja savam Google kontam esat iespējojis divu faktoru autentifikāciju (2FA), jums ir jāizveido lietotnes parole. Lietotņu parole ir atsevišķa parole, kas nodrošina piekļuvi noteiktām lietotnēm vai ierīcēm, neatklājot jūsu primāro Google konta paroli. Izpildiet tālāk sniegtos norādījumus, lai ģenerētu lietotnes paroli.

1. Atveriet Google konta iestatījumu lapu, apmeklējot vietni https://myaccount.google.com/.

  1. Pārejiet uz cilni "Drošība".

3. Atrodiet sadaļu “2FA”, ritiniet uz leju un atlasiet “Lietotņu paroles”.

Google Account Security

Google Account Security

  1. Iespējams, jums tiks lūgts vēlreiz ievadīt Google konta paroli, lai pārbaudītu drošību.

5. Nolaižamajā izvēlnē “Atlasīt lietotni” izvēlieties “Pasts” vai “Cits (pielāgots nosaukums)”.

  • Ja ir pieejama opcija “Pasts”, atlasiet to.

  • Ja opcija "Pasts" nav pieejama, izvēlieties "Cits (pielāgots nosaukums)" un identifikācijai norādiet pielāgotu nosaukumu.

  1. Noklikšķiniet uz pogas "Ģenerēt" vai "Izveidot paroli".

7. Google ģenerēs jums unikālu lietotnes paroli. Pierakstiet šo paroli, jo mēs to izmantosim savā lietojumprogrammā e-pasta sūtīšanai.

  1. Izmantojiet šo ģenerēto lietotnes paroli savas Next.js lietojumprogrammas SMTP servera konfigurācijā. Nomainiet savu parasto Gmail konta paroli ar šīs lietotnes paroli.

Tas nodrošina, ka pat ar iespējotu 2FA jūsu lietojumprogramma var droši sūtīt e-pastus, izmantojot jūsu Gmail kontu.

PostgreSQL, izmantojot Supabase

Pirms mēs varam turpināt, mums ir jāpārliecinās, vai mūsu projekta datubāze darbojas pareizi. Šai demonstrācijai mēs iesakām izmantot Supabase PostgreSQL datu bāzi. Lai sāktu darbu ar Supabase projektu un iegūtu PostgreSQL savienojuma URL, veiciet šīs darbības:

1. Atveriet vietni supabase.io un pierakstieties savā kontā vai izveidojiet jaunu kontu, ja jums tāda nav.

  1. Kad būsit pieteicies, tiksit novirzīts uz Supabase informācijas paneli. Noklikšķiniet uz "Izveidot jaunu projektu", lai sāktu jaunu projektu.

  2. Nosauciet savu projektu un atlasiet reģionu, kas ir vistuvāk jūsu pašreizējai atrašanās vietai. Atcerieties savu paroli, tā būs nepieciešama vēlāk.

  3. Kad būsit izveidojis projektu, tiksit novirzīts uz projekta informācijas paneli. Noklikšķiniet uz "Datu bāze" kreisajā sānjoslā, lai piekļūtu datu bāzes iestatījumiem.

  4. Sadaļā "Datu bāze" jūs atradīsiet PostgreSQL savienojuma URL. Šajā URL ir visa nepieciešamā informācija, lai izveidotu savienojumu ar jūsu Supabase projekta datu bāzi, piemēram, resursdators, ports, datu bāzes nosaukums, lietotājvārds un parole. Tas tiks parādīts šādā formātā: postgres://<lietotājvārds>:<parole>@<host>:<port>/<database>

Postgresql connection string

6. Nokopējiet PostgreSQL savienojuma URL un saglabājiet to drošībā. Tas būs nepieciešams, lai izveidotu savienojumu starp lietojumprogrammu un Supabase datu bāzi.

    // .env
    
    DATABASE_URL=postgresql://postgres:[Password]@db.ixjsisbwdafsjvgifliu.supabase.co:5432/postgres
    ```

Tagad nodrošināsim, ka mēs ģenerējam savu Prisma klientu, izpildot šādu komandu: `npx prisma generate`.

Prisma Client ir datu bāzes klients, kas tiek automātiski ģenerēts, pamatojoties uz jūsu shēmu. Pēc noklusējuma Prisma Client tiek ģenerēts mapē "node_modules/.prisma/client", taču varat [ja nepieciešams, norādīt pielāgotu atrašanās vietu](https://www.prisma.io/docs/concepts/components/prisma-client/working-with-prismaclient/generating-prisma-client#using-a-custom-output-path).

Tālāk mēs turpināsim izveidot savu sākotnējo migrāciju. Palaidiet šādu komandu: "npx prisma migrate dev". Katrai migrācijai varat piešķirt aprakstošu nosaukumu.

Programmā Prisma migrēšana ir metode, ko izmanto datu bāzes shēmas pielāgojumu pārvaldībai laika gaitā. Tas ļauj mainīt datu bāzes struktūru, nezaudējot nekādus iepriekš esošos datus. Šīs migrācijas ir ļoti svarīgas, jo tās nodrošina, ka datu bāzes shēma atbilst jūsu lietojumprogrammas vajadzībām, kad tās mainās. Izmantojot Prisma migrācijas rīku, varat ērti versijas, lietot un atsaukt šīs izmaiņas, vienkāršojot komandas darbu un uzturot vienotu datu bāzes shēmu dažādās vidēs.

Tagad, pārbaudot mūsu datu bāzi, datu bāzes sadaļā varēsim redzēt izmaiņas no sākotnējās migrācijas.

Veicot sākotnējo migrāciju, mēs esam piemērojuši izmaiņas mūsu datu bāzes shēmā, kā noteikts migrācijas skriptā.

![Database Tables after Migration](https://drive.google.com/uc?export=view&id=1PZ6ban5h4VZs3UHQoJS_5kNYkhqs-MAx)

### NextAuthJS iestatīšana, izmantojot Prisma adapteri

Next.js lietojumprogrammā NextAuthJS izmanto visaptverošo maršrutu, kas pazīstams arī kā aizstājējzīmes vai rezerves maršruts, lai pārvaldītu autentifikācijas pieprasījumus. Šis dinamiskais maršruts ir definēts, izmantojot uz failiem balstītu maršrutēšanas sistēmu vietnē Next.js.

Izveidojiet mapi ar nosaukumu “**api**” direktorijā “**app**”. Mapē “**api**” izveidojiet mapi “**auth**”. Mapē "**auth**" kā mapi izveidojiet visaptverošu maršrutu ar nosaukumu "**[...nextauth]**". Visbeidzot, visaptverošā maršruta mapē izveidojiet failu "**route.ts**" un pievienojiet šādu kodu.

```jsx
// app/api/auth/[...nextauth]/route.ts
import { PrismaAdapter } from '@next-auth/prisma-adapter';
import { PrismaClient } from '@prisma/client';
import NextAuth from 'next-auth';
import EmailProvider from 'next-auth/providers/email';

const prisma = new PrismaClient();

export const authOptions = {
  adapter: PrismaAdapter(prisma),
  providers: [
    EmailProvider({
      server: {
        host: process.env.EMAIL_SERVER_HOST,
        port: process.env.EMAIL_SERVER_PORT,
        auth: {
          user: process.env.EMAIL_SERVER_USER,
          pass: process.env.EMAIL_SERVER_PASSWORD,
        },
      },
      from: process.env.EMAIL_FROM,
    }),
  ]
};

const handler = NextAuth(authOptions);

export { handler as GET, handler as POST };

Kopējā maršruta failā mēs importējam NextAuthJS bibliotēku un iestatām autentifikācijas opcijas, nodrošinātājus un konfigurācijas. NextAuthJS apstrādā ienākošo pieprasījumu parsēšanu, identificē nepieciešamo autentifikācijas darbību un izpilda atbilstošo loģiku atbilstoši norādītajām opcijām.

Norādītais kods iestata NextAuthJS ar Prisma adapteri autentifikācijai, izmantojot e-pasta pakalpojumu sniedzēju. Izskaidrosim katru apgalvojumu:

  1. Imports:

PrismaAdapter un PrismaClient tiek importēti attiecīgi no @next-auth/prisma-adapter un @prisma/client. Tie tiek izmantoti, lai integrētu NextAuthJS ar Prisma.

NextAuth ir importēts no next-auth, un tā ir galvenā bibliotēka autentifikācijas apstrādei lietojumprogrammās Next.js.

EmailProvider tiek importēts no next-auth/providers/email un tiek izmantots kā nodrošinātājs uz e-pastu balstītai autentifikācijai.

  1. Prisma iestatīšana:
  • PrismaClient gadījums tiek izveidots, izmantojot new PrismaClient(). Tas ļauj sazināties ar Prisma ORM un pamatā esošo datu bāzi.

3. Autentifikācijas opcijas:

  • authOptions ir objekts, kas definē autentifikācijas konfigurāciju programmā NextAuthJS.

- Īpašums adapteris ir iestatīts uz PrismaAdapter(prisma), kas savieno NextAuthJS ar Prisma, izmantojot PrismaAdapter.

- Masīvā providers ir viens nodrošinātājs EmailProvider. Tas ir konfigurēts ar nepieciešamo e-pasta servera informāciju un no e-pasta adresi.

  1. NextAuth apdarinātājs:
  • Funkcija NextAuth tiek izsaukta ar authOptions kā argumentu, izveidojot autentifikācijas apdarinātāju.

  • Iegūtais apdarinātājs tiek piešķirts mainīgajam handler.

  1. Eksportēt:

Apdarinātājs** tiek eksportēts kā **GET** un **POST`, lai atbalstītu gan HTTP GET, gan POST pieprasījumus.

Tagad palaidīsim savu serveri un pārbaudīsim tā funkcionalitāti. Vispirms palaidiet izstrādes serveri, palaižot 'yarn dev'. Pēc tam atveriet pārlūkprogrammu un apmeklējiet vietni `localhost:3000', lai skatītu lietojumprogrammas darbību.

Lai pārbaudītu autentifikācijas funkcionalitāti, apmeklējiet vietni "localhost:3000/api/auth/signin". Šeit jūs izjutīsit NextAuthJS burvību. Komplektā NextAuthJS iekļautā veidne nodrošina bezparoles pierakstīšanās procesu. Lai to izmēģinātu, ievadiet derīgu e-pasta adresi.

Passwordless Signin Input

Kad esat iesniedzis e-pasta ziņojumu, NextAuthJS apstrādās aizkulišu procesu. Pirmkārt, tas ģenerēs un nosūtīs e-pasta ziņojumu ar unikālu pierakstīšanās saiti uz norādīto e-pasta adresi. Šī saite kalpo kā droša autentifikācijas marķieris lietotājam. Pēc tam, kad lietotājs noklikšķina uz saites, NextAuthJS apstiprinās marķieri un autentificēs lietotāju.

Signin Email

Šī bezparoles pieteikšanās funkcija uzlabo drošību un lietotāja pieredzi, novēršot vajadzību pēc parolēm. Lietotāji var ātri un droši piekļūt saviem kontiem, vienkārši noklikšķinot uz saites, kas saņemta pa e-pastu. Tas racionalizē pieteikšanās procesu un samazina ar paroli saistītu ievainojamību risku.

Kad lietotājs noklikšķina uz NextAuthJS ģenerētā pierakstīšanās e-pasta un tiek autentificēts, aizkulisēs tiek veiktas vairākas darbības, lai veicinātu netraucētu pieteikšanos.

1. E-pasta saites pārbaude: kad lietotājs noklikšķina uz pierakstīšanās saites, NextAuthJS validē saitē iegulto autentifikācijas pilnvaru. Šis marķieris nodrošina autentifikācijas procesa drošību un integritāti.

2. Autentifikācijas process: pēc veiksmīgas pilnvaras validācijas NextAuthJS identificē lietotāju un pabeidz autentifikācijas procesu. Tas pārbauda lietotāja identitāti, pamatojoties uz nodrošināto pilnvaru un jebkādiem papildu konfigurētiem autentifikācijas faktoriem, piemēram, vairāku faktoru autentifikāciju.

3. Sesijas izveide: pēc veiksmīgas autentifikācijas NextAuthJS izveido lietotāja sesiju. Sesija ir pastāvīgs stāvoklis, kas atspoguļo lietotāja autentifikācijas statusu un ļauj piekļūt aizsargātajiem resursiem bez atkārtotas autentifikācijas turpmākiem pieprasījumiem.

4. Sīkfaili: NextAuthJS iestata drošus tikai HTTP sīkfailus lietotāja pārlūkprogrammā, lai pārvaldītu sesiju. Šīm sīkdatnēm ir izšķiroša nozīme, lai uzturētu lietotāja autentificētu stāvokli vairākos pieprasījumos. Sīkfaili parasti ietver sesijas sīkfailu un pēc izvēles atsvaidzināšanas pilnvaras sīkfailu atkarībā no autentifikācijas konfigurācijas.

Cookies Set By NextAuthJS

1. Sesijas sīkfails: sesijas sīkfails satur sesijas identifikatoru (piem., nejauši ģenerētu virkni), kas unikāli identificē lietotāja sesiju. Tas palīdz NextAuthJS saistīt turpmākos pieprasījumus ar pareizo sesiju un lietotāju.

  1. CSRF marķiera sīkfails: NextAuthJS iestata CSRF (Cross-Site Request Forgery) pilnvaras sīkfailu, lai aizsargātu pret CSRF uzbrukumiem. CSRF marķieris ir unikāla vērtība, ko ģenerē NextAuthJS un glabā sīkfailā. To izmanto, lai apstiprinātu un pārbaudītu turpmāko lietotāja veikto pieprasījumu autentiskumu. Kad lietotājs iesniedz veidlapas vai veic sensitīvas darbības, CSRF pilnvara tiek iekļauta pieprasījuma galvenēs vai pamattekstā, lai nodrošinātu, ka pieprasījums ir cēlies no autentificēta lietotāja sesijas, nevis no ļaunprātīga avota.

3. Atzvanīšanas URL sīkfails: NextAuthJS iestata atzvanīšanas URL sīkfailu, lai saglabātu sākotnējo URL, kuram lietotājs mēģināja piekļūt, pirms tika novirzīts uz autentifikācijas plūsmu. Šis sīkfails palīdz NextAuthJS pēc veiksmīgas autentifikācijas novirzīt lietotāju atpakaļ uz vēlamo lapu. Tas nodrošina vienmērīgu lietotāja pieredzi, nemanāmi atgriežot lietotāju uz paredzēto galamērķi, nevis vispārīgu galveno lapu.

Izmantojot drošus tikai HTTP sīkfailus, NextAuthJS nodrošina, ka autentifikācijas stāvoklis paliek drošs un drošs pret viltojumiem. Sīkfaili ir šifrēti, novēršot ļaunprātīgu dalībnieku nesankcionētu piekļuvi vai modifikācijas.

Lielisks darbs, veiksmīgi integrējot NextAuthJS ar Prisma adapteri savā Next.js lietojumprogrammā! Ar NextAuthJS nodrošināto vieglumu un pielāgojamību tagad jums ir uzticama autentifikācijas sistēma.

Lai atrastu šajā rokasgrāmatā izmantoto kodu, skatiet tālāk norādīto GitHub repozitoriju: https://github.com/codelabsacademy/next-auth-guide.

Bet kāpēc šeit apstāties? Ja jūs aizraujas ar tīmekļa izstrādi un vēlaties uzlabot savas prasmes, apsveriet iespēju pieteikties mūsu tīmekļa izstrādes sākumnometnei. Mūsu bootcamp piedāvā visaptverošu mācību pieredzi, nodrošinot jūs ar zināšanām un praktiskām iemaņām, kas nepieciešamas, lai izceltos dinamiskajā tīmekļa izstrādes pasaulē.

Pievienojoties mūsu bootcamp, jūs iegūsit praktisku pieredzi ar jaunākajām tehnoloģijām, strādāsiet pie reāliem projektiem un saņemsiet personalizētus norādījumus no nozares ekspertiem. Neatkarīgi no tā, vai esat iesācējs vai pieredzējis izstrādātājs, mūsu programma ir izstrādāta, lai paaugstinātu jūsu tīmekļa izstrādes prasmes nākamajā līmenī.

Nepalaidiet garām šo iespēju, lai paātrinātu savu tīmekļa izstrādes ceļu. Piesakieties mūsu tīmekļa izstrādes sāknēšanas nometnei jau šodien un atraisiet visu savu potenciālu aizraujošajā tīmekļa izstrādes jomā. Kopā veidosim pārsteidzošu digitālo pieredzi un veidosim tīmekļa nākotni.


Career Services background pattern

Karjeras pakalpojumi

Contact Section background image

Sazināsimies

Code Labs Academy © 2024 Visas tiesības paturētas.