Login işlemi için back-end'e istek attığında, backend'den iki şey döneceksin.
- JWT token
- Kullanıcı Datası
React tarafında token değerini state'de tutacaksın. State'e eklerken aynı zamanda localStorage'a da ekleyeceksin.
Kullanıcı datasını da yine state'de tutacaksın ancak localStorage'a eklemene gerek yok.
Çünkü her sayfa yenilendiğinde ilk başta token değerin varsa gidip /user-info gibi bir end-point'e token'ı gönderip bu kullanıcının geçerli olup olmadığına bakacaksın.
Eğer token geçerliyse kullanıcı bilgileri dönecek, geçersizse react tarafında token'ı silip kullanıcının oturumunu sonlandıracaksın.
Eğer rol bazlı işlemler yapacaksan, users tablonda role ya da permissions gibi kolonların olabilir. User bilgisini döndürürken bunu state'de tutacağın için, projende istediğin yerde admin'se göster değilse gösterme gibi komutlar yazabilirsin.
Zaten backend'e istek attığında admin olup olmadığını orada da kontrol edeceğin için sorun olmayacaktır.
chatgpt'ye sordum su adimlari denemeni tavsiye etti:
- Chrome'u tamamen kapatın ve yeniden açın.
- Chrome'u en son sürüme güncelleyin.
- Chrome eklentilerinizi devre dışı bırakın ve yeniden deneyin.
- Tarayıcınızın önbelleğini ve çerezlerini temizleyin.
- Tarayıcınızı yeniden başlatın ve yeniden deneyin.
En kotu chrome'u silip yeniden yukleyip deneyebilirsin.
cunku string, bunda bir hata yok? yapmak istedigin nedir?
DELIMITER belirlemen gerekiyor. Yani şu kodu çalıştırırsan sorunun kalmaz:
DELIMITER $$
CREATE TRIGGER set_permanent_ban
AFTER INSERT ON sb_bans
FOR EACH ROW
BEGIN
DECLARE ban_count INT;
SET ban_count = (SELECT COUNT(*) FROM sb_bans WHERE player_id = NEW.player_id AND ban_type = 0 AND ban_reason LIKE '%SMAC 0.8.7.3: AutoTrigger Detection: Auto-Fire%');
IF ban_count >= 3 THEN
UPDATE sb_bans SET ban_type = 1, ban_length = 0 WHERE ban_id = NEW.ban_id;
END IF;
END $$
DELIMITER ;
nodejs sisteminde başarıyla kurulu mu? terminalden önce onu bir kontrol et
node -v
eğer tamamsa, create-nuxt-app paketini global olarak kurdun mu?
npm install -g create-nuxt-app
eğer bu da tamamsa proje oluşturmak için şöyle bir komut mu çalıştırdın?
create-nuxt-app proje-adi
eğer hala hata alıyorsan PATH doğru şekilde ayarlanmamış olabilir.
windows kullanıyorsan şu adımları takip et:
- Sistem ortam değişkenlerini düzenlemek için, "Denetim Masası" > "Sistem ve Güvenlik" > "Sistem" > "Gelişmiş sistem ayarları" > "Gelişmiş" sekmesini aç ve "Ortam Değişkenleri" düğmesine tıkla.
- "Sistem değişkenleri" bölümündeki "Path" değişkenini bul ve düzenle. Eğer burada create-nuxt-app'in yolunu görmüyorsan, komutun çalışması için gerekli olan create-nuxt-app'in global yükleme yolunu ekle. Genellikle bu yol, C:\Users\<KullanıcıAdı>\AppData\Roaming\npm şeklindedir. Her işletim sistemi ve yapılandırmaya bağlı olarak farklı olabilir.
mac yad alinux kullanıyorsan:
- Terminalde
echo $PATHkomutunu çalıştırarak mevcut PATH değişkenini kontrol et. - Eğer create-nuxt-app'in yolunu görmüyorsan, global yükleme yollarından birine eklemen lazım. Bu işlem için
~/.bashrc,~/.bash_profile,~/.zshrcgibi shell yapılandırma dosyalarını düzenleyebilirsin. Örneğin:
export PATH=$PATH:/usr/local/share/npm/bin
Bu satırı, uygun shell yapılandırma dosyasının sonuna ekle ve ardından source <shell_yapılandırma_dosyası> komutu ile yapılandırma dosyasını kaydet ve uygula. Örneğin, eğer .bashrc dosyasını düzenlediysen, source ~/.bashrc komutunu çalıştır.
Tüm değişikliklerin uygulandığından emin olduktan sonra, terminali kapat ve yeniden aç. Ardından, create-nuxt-app komutunu tekrar çalıştırarak Nuxt projesi oluşturmaya çalış. Muhtemelen çalışacaktır :) çalışmazsa tekrar yazarsın.
bunun için eklentiye gerek yok, input'a basıp bu cihazdan okutursan otomatik atıyor olması lazım zaten, denedin mi?
ChatGTP'nin GPT 3.5 modeli ücretsiz olarak kullanılabiliyor. Ancak yeni tanıtılan GPT-4 sadece Plus kullanıcılarına açıldı.
Eğer GTP-4 Modelini kullanmak istiyorsan aylık 20$ dolar ödemen gerekiyor. Ancak diğerini ücretsiz olarak kullanabiliyorsun, tabi çok yoğunluk olduğu için cevaplar yarıda kesilebiliyor ve ya hiç cevap vermeyebiliyor ücretsiz versiyonunda, o yüzden ciddi ciddi kullanacaksan abonelik alman daha iyi olur.
eger unique bir degerin varsa id haricinde, elbette id kullanmak zorunda degilsin. ornegin blog mantigini ele alalim.
eger senin basliklarinin tamami birbirinden farkli olacagina eminsen, unique olacaksa o zaman id yerine url kontrolu yapabilirsin, sana kalmis bu durum.
soyle bir kontrol ile belki daha kolay yonetebilirsin;
<?php
$ad = $_POST['ad'];
$ozellik = $_POST['ozellik'];
$kategori = $_POST['kategori'];
$eskifiyat = $_POST['eskifiyat'];
$yenifiyat = $_POST['yenifiyat'];
$indirimlifiyat = $_POST['indirimlifiyat'];
$urunsayisi = $_POST['urunsayisi'];
$urunalani = $_POST['urunalani'];
$icerikid = $_POST['icerikid'];
// dosya varsa hatalar bu degiskende tutulacak
$errors = [];
foreach ($ad as $index => $names) {
$s_ad = $names;
$s_ozellik = $ozellik[$index];
$s_kategori = $kategori[$index];
$s_eskifiyat = $eskifiyat[$index];
$s_yenifiyat = $yenifiyat[$index];
$s_indirimlifiyat = $indirimlifiyat[$index];
$s_urunsayisi = $urunsayisi[$index];
$s_urunalani = $urunalani[$index];
$s_icerikid = $icerikid[$index];
$dosya = 'json/' . $s_icerikid . '.json';
if (file_exists($dosya)) {
$errors[] = "$dosya diye bir dosya var";
} else {
// dosya yoksa islemlere devam et
global $filename;
$filename = $s_icerikid . ".json";
$myObj->ss_dosya_adi[] = $dosya_adi;
$myObj->ss_ad = $s_ad;
$myObj->ss_ozellik = $s_ozellik;
$myObj->ss_kategori = $s_kategori;
$myObj->ss_eskifiyat = $s_eskifiyat;
$myObj->ss_yenifiyat = $s_yenifiyat;
$myObj->ss_indirimlifiyat = $s_indirimlifiyat;
$myObj->ss_urunsayisi = $s_urunsayisi;
$myObj->ss_urunalani = $s_urunalani;
$myObj->ss_icerikid = $s_icerikid;
$dizijson = json_encode($myObj);
file_put_contents("json/" . $filename, $dizijson);
if (move_uploaded_file($gecici_yol, "../../images/indexurunler/" . $dosya_adi)) {
}
}
}
if (count($errors) > 0) {
print_r($errors); // hatali olan dosyalari gosterir, hatali olmayanlar eklendi hatali olanlar icinde uyari vs, verebilirsin
}
bu sekilde degil, tum yapiyi kucuk componentlere bolmelisin ve her component ayri bir js dosyasi olmali, o zaman yonetmeti daha kullanisli olacak, yeniden kullanilabilirligi olacak