-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpassport-config.js
104 lines (77 loc) · 3.78 KB
/
passport-config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
const LocalStrategy = require('passport-local').Strategy
const userModel = require('./models/userModel')
const bcrypt = require('bcrypt')
//duzenleme yapacagimiz sinifi referans aliyoruz
function initialize(passport){
//passport icin local yani bizim site icinde kayit olunacak diyoruz
passport.use(new LocalStrategy(
//giris yapilirken unique bir element lazim o buradaki username
//username icin dogrulama burada password
//dogrulamanin basarili olup olmadigini dondurmemiz icin gereken callback
function(username, password, done) {
/*
done(err,result,options)
err: yazilimsal olarak hata,Exception
result: giris yapilan kullanicinin kendisi yoksa olmadigini belirtmek icin false
options: eger err ve result yok ise giris hatasinin ozellikleri
*/
// kullanicinin dogrulanmasi icin karsilastirilacak veri ,veri tabanindan alinacak. filtre olarak
// email ozelligini ayirt edici ozellik olarak bize verilen username ile karsilastirilip
// sonucu (err,user)fonksiyonuna veriyoruz
userModel.findOne({ email: username },function (err, user) {
//eger veritabanindaki islemde hata varsa
if (err) {
//hatayi dondur
return done(err);
}
//eger veritabaninda bir kullanici bulunamadiysa
//eger kullanici null ise
if (!user) {
//yazilimsal hata yok, kullanici yok,ozellikler{mesaj :'hatali kullanici adi'}
//diye dondur
return done(null, false, { message: 'Incorrect Username' });
}
//buradan sonrasinda user tanimli yani bulunmus
if(!user.isVerified){
return done(null,false,{message:"Not Verified Yet"})
}
//bcrypt'de bize verilen(kullanicinin girdigi) ile veritabanindaki sifrelenmis sifreyi
//kontrol edip (err,result) metoduna veriyoruz
bcrypt.compare(password,user.password,(err,result)=>{
//hata var ise hatayi firlat
if (err) {throw err}
//eger sifreler farkli ise
if(!result){
//yazilimsal hata yok, kullanici yok,ozellikler{mesaj :'hatali sifre'}
//diye dondur
return done(null, false, { message: 'Incorrect password.' });
}else{//eger sifreler farkli degilse ,ayni ise
//yazilimsal hata yok, kullanici var
//diye dondur
return done(null, user);
//burdan sonra user degiskenini RAM'e kaydetmek icin serializeUser methodu cagiriliyor
}
})
});
}
));
//kullanici serverin raminda tutarken
passport.serializeUser((user,done)=>{
/*
done(err,kaydolacak verinin id'si (RAM'e))
*/
//kullanicinin id'si ile RAM'e koyuyoruz
done(null,user.id)
})
//kullanici serverin ramindan cikartirken
//kayitin omru bittiginde
passport.deserializeUser(async(id,done)=>{
/*
done(err,silinecek verinin id'si(RAM'den) )
*/
//veritabanindan bize verilen(daha onceden de bizim ona verdigim) id ile
//kullaniciyi buluyoruz ve RAM'den siliyoruz
return done(null,await userModel.findById(id))
})
}
module.exports = initialize