Bir uygulamada oturum açmak için Google hesabınızı kullandıysanız, bunun ne kadar kolay olduğunu fark etmiş olabilirsiniz. Yalnızca bir düğmeye tıklamanız yeterlidir ve e-postanızı veya şifrenizi yazmanız gerekmez. Bu basit gibi görünse de, kaputun altında olanlar oldukça karmaşıktır. Ancak Pasaport gibi araçlar bunu kolaylaştırır.
Bu eğiticide, Passport ve Express kullanarak Google kimlik doğrulamasını Node'da nasıl uygulayacağınızı öğreneceksiniz.
Pasaport Nedir?
Pasaport (veya Passport.js), Google ve Twitter gibi platformları kullanarak sosyal kimlik doğrulama dahil olmak üzere kullanıcıların kimliğini doğrulamak için 500'den fazla strateji sağlayan bir Düğüm kimlik doğrulama ara yazılımıdır.
kullanacaksın pasaport-google-oauth2 Google'da kullanıcıların kimliğini doğrulama stratejisi.
Düğümde Google Kimlik Doğrulama Sistemi Oluşturma
Bu, oluşturacağınız kimlik doğrulama sistemine genel bir bakıştır:
- Bir kullanıcı giriş düğmesini tıkladığında, oturum açacağı Google oturum açma sayfasına gönderilir.
- Google, kullanıcıyı bir erişim belirteci ile uygulamanıza yönlendirecektir. Erişim belirteci, o kullanıcının profil bilgilerine erişmenize izin verir.
- Profil verilerini almak için erişim jetonunu Google'a gönderin.
- Yeni bir kullanıcı oluşturun veya mevcut kullanıcıyı veritabanından alın.
- Hassas rotaları korumak için JWT'leri kullanın.
Pasaport Kullanarak NodeJS'de Google Kimlik Doğrulaması Nasıl Kurulur
Kullanıcıları Google OAuth ile yetkilendirmek için aşağıdaki adımları izleyin,
1. Adım: Bir Google Müşteri Kimliği ve Müşteri Sırrı oluşturun
Kullanıcıları uygulamanızda oturum açmak için Google'ı kullanmadan önce, Passport'u yapılandırırken kullanılacak istemci kimliğini ve istemci sırrını almak için uygulamanızı Google'a kaydettirmeniz gerekir.
giriş yap Google Bulut konsolu ve uygulamanızı kaydetmek için aşağıdaki adımları izleyin.
Yeni bir proje oluşturun. Menü çubuğunda, öğesini seçin. kimlik bilgileri ve açılır listede öğesini seçin. OAuth istemci kimliği.
Uygulama türü için Web uygulaması. Ad alanına uygulamanız için tercih ettiğiniz adı ekleyin.
Yetkili yeniden yönlendirme URI'leri altında, şunu kullanın: http://localhost: 3000 ve http://localhost: 3000/auth/google/geri arama yetkili yönlendirme URI'leri için.
Tıklamak oluşturmak OAuth istemcisini oluşturmak için. Uygulama kimlik bilgileri hassas olduğundan, bir .env dosyaya ekleyin ve müşteri kimliğini ve müşteri sırrını buna ekleyin.
MÜŞTERİ_Kimliği =CLIENT_SECRET =
2. Adım: Düğüm Sunucusunu Kurun
Bir klasör oluşturun, kullanıcı-google-auth, ve ona gidin.
mkdir kullanıcı-google-auth
cd kullanıcı-google-auth
başlat npm yaratmak paket.json.
npm başlangıç -y
Express'i kullanacağınız için sunucuyu oluştur, aşağıdaki komutu çalıştırarak kurun.
npm ekspres yükleme
Klasörü tercih ettiğiniz metin düzenleyiciyle açın ve yeni bir dosya oluşturun app.js. Uygulamanızın giriş noktası olarak hizmet edecektir.
NodeJS sunucusunu şurada oluşturun: app.js.
const ifade = gerekli ("ekspres");
const uygulama = ekspres();
const PORT = 3000;
app.listen (PORT, () => {
konsol.log(`${PORT} portunda dinleme yapılıyor`);
});
2. Adım: MongoDB'yi Kurun
Google'dan alınan kullanıcı verilerini bir MongoDB veritabanı. Kullanıcı bilgilerini kaydetmeden önce verilerin saklanacağı yapıyı tanımlamanız gerekir. Mongoose bunun için mükemmeldir. Veri modelleri oluşturmanın oldukça basit bir yolunu sağlar.
Düzenlemek firavun faresi.
npm mongoose'u yükle
Yeni bir dosya oluştur kullanıcıModel.jsve kullanıcı şemasını oluşturun.
const firavun faresi = require("firavun faresi");
const { Şema } = mongoose.model;
const UserSchema = yeni Şema({
Google: {
kimlik: {
tür: Dize,
},
isim: {
tür: Dize,
},
e-posta: {
tür: Dize,
},
},
});
const Kullanıcı = mongoose.model("Kullanıcı", UserSchema);
modül.exports = Kullanıcı;
İçinde kullanıcıModel.js, firavun faresini içe aktardınız ve yeni bir şema oluşturdunuz.
Google'dan gelen bilgileri grupladığınıza dikkat edin. Bu, özellikle başka kimlik doğrulama yöntemleri kullandığınızda ve bir kullanıcı birden fazla kullandığında kullanışlıdır. Çift kaydın önlenmesini kolaylaştırır.
Ardından, oluştur db.js.
const firavun faresi = require("firavun faresi");
firavun faresi. Söz = küresel. Söz vermek;
const dbUrl = "mongodb://localhost/user";
const connect = zaman uyumsuz () => {
mongoose.connect (dbUrl, { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.bağlantı;
db.on("hata", () => {
konsol.log("bağlanamadı");
});
db.once("aç", () => {
konsol.log("> Veritabanına başarıyla bağlanıldı");
});
};
modül.exports = {bağlan };
Veritabanına bağlanın app.js.
const ifade = gerekli ("ekspres");
const uygulama = ekspres();
const PORT = 3000;
const db = gerekli ("./db");
db.connect();
app.listen (PORT, () => {
konsol.log(`${PORT} portunda dinleme yapılıyor`);
});
3. Adım: Pasaportunuzu Ayarlayın
Düzenlemek pasaport ve pasaport-google-oauth2.
npm pasaport pasaportu-google-oauth2
Yeni bir dosya oluşturun, pasaportConfig.jsve Google stratejisini şuradan içe aktarın: pasaport-google-oauth2 ve kullanıcıModel.js.
const GoogleStrategy = require("passport-google-oauth2").Strategy;
const Kullanıcı = require("./userModel");
Yapılandırmak için uygulama kimlik bilgilerinizi kullanın pasaport Google OAuth ile.
module.exports = (pasaport) => {
pasaport.use (yeni GoogleStrategy({
müşteri kimliği: process.env. MÜŞTERİ KİMLİĞİ,
clientSecret: process.env. MÜŞTERİ_GİZLİ,
geri arama URL'si: " http://localhost: 3000/auth/google/geri arama",
passReqToCallback: doğru
},
zaman uyumsuz (istek, accessToken, refreshToken, profil, bitti) => {
denemek {
olsun mevcutUser = User.findOne({ 'google.id': profile.id });
// kullanıcı varsa kullanıcıyı döndür
if (mevcut Kullanıcı) {
dönüş yapıldı (boş, mevcut Kullanıcı);
}
// kullanıcı yoksa yeni bir kullanıcı oluşturun
konsol.log('Yeni kullanıcı oluşturuluyor...');
const yeniKullanıcı = yeni Kullanıcı({
yöntem: 'google',
Google: {
kimlik: profile.id,
ad: profile.displayName,
e-posta: profile.emails[0].value
}
});
bekle newUser.save();
dönüş yapıldı (null, newUser);
} yakalama (hata) {
dönüş yapıldı (hata, yanlış)
}
}
));
}
Google'dan profil bilgilerini aldıktan sonra, kullanıcının veritabanında olup olmadığını kontrol edin. Eğer yaparlarsa, bulunan kullanıcıyı geri göndermeniz yeterlidir. Kullanıcı yeniyse, veritabanında yeni bir belge oluşturun ve oluşturulan kullanıcıyı geri gönderin.
ile çalıştığınızı unutmayın. ortam değişkenler bu nedenle npm paket dotenv uygulamanızda bunlara erişmek için
Düzenlemek dotenv.
npm dotenv'i kurun
Kullanmak dotenv içinde app.js.
require("dotenv").config()
İçinde app.js,geçmek pasaport ile pasaportConfig.js
const pasaport = zorunlu ("pasaport");
require("./passportConfig")(pasaport);
4. Adım: Kimlik Doğrulama Yolları Oluşturun
Şunlar için üç yola ihtiyacınız var:
- Erişim belirtecini almak için kullanıcıyı Google oturum açma sayfasına yönlendirin.
- Alınan erişim belirtecini kullanarak kullanıcı verilerini alın.
- sonra kullanıcıyı profil sayfasına yönlendirin. başarılı kimlik doğrulama.
// Kullanıcıyı Google oturum açma sayfasına yönlendir
app.get(
"/auth/google",
pasaport.authenticate("google", { kapsam: ["e-posta", "profil"] })
);
// Alınan erişim belirtecini kullanarak kullanıcı verilerini alın
app.get(
"/auth/google/geri arama",
pasaport.authenticate("google", { oturum: yanlış }),
(gerekli, öz) => {
res.redirect("/profile/");
}
);
// başarılı oturum açtıktan sonra rota profili
app.get("/profile", (gerekli, res) => {
konsol.log (gerekli);
res.send("Hoş Geldiniz");
});
Adım 5: Özel Rotaları Koruyun
Artık bir kullanıcı olarak oturum açtığınıza göre, uygulamanızın bazı bölümlerini yalnızca kimliği doğrulanmış kullanıcılarla nasıl kısıtlayabilirsiniz? Bunu yapmanın bir yolu JSON Web Belirteçlerini (JWT'ler) kullanmaktır. JWT'ler, bilgileri iletmenin güvenli bir yolunu sunar. İle kullanıcıları yetkilendir JWT'leri kullanarak uygulamanız:
- Kullanıcı verilerini kullanarak bir belirteç oluşturun.
- Belirteci kullanıcıya iletin (kullanıcı, yetkilendirme gerektiren isteklerle belirteci geri gönderir).
- Geri gönderilen belirteci doğrulayın.
- Sunulan belirteç geçerliyse kullanıcıya erişim izni verin.
Düzenlemek jsonwebtoken JWT'lerle çalışmak için.
npm jsonwebtoken'i kurun
İçinde app.js, içe aktarmak jsonwebtoken.
const jwt = zorunlu ("jsonwebtoken")
Kullanıcıyı imzalamak ve bir belirteç oluşturmak için Google geri arama URL'sini değiştirin.
app.get(
"/auth/google/geri arama",
pasaport.authenticate("google", { oturum: yanlış }),
(gerekli, öz) => {
jwt.işareti(
{ kullanıcı: req.user },
"gizli anahtar",
{ sona erer: "1h" },
(hata, belirteç) => {
eğer (hata) {
res.json'ı döndür({
belirteç: boş,
});
}
res.json({
jeton,
});
}
);
}
);
Giriş yaparsanız, jetonu alacaksınız.
Ardından, kullanın pasaport-jwt, Passport tarafından belirteci doğrulamak ve kullanıcıları yetkilendirmek için sağlanan bir JWT stratejisi.
npm pasaport-jwt yükleyin
İçinde pasaportConfig.js, JWT stratejisini ekleyin.
const JwtStrategy = require("pasaport-jwt").Strategy;
const { ExtractJwt } = require("pasaport-jwt");
module.exports = (pasaport) => {
pasaport.use (yeni GoogleStrategy(
// Google stratejisi
);
pasaport.use(
yeni JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader("yetkilendirme"),
secretOrKey: "gizliKey",
},
zaman uyumsuz (jwtPayload, tamamlandı) => {
denemek {
// Kullanıcıyı çıkar
const kullanıcı = jwtPayload.user;
done (boş, kullanıcı);
} yakalama (hata) {
yapıldı (hata, yanlış);
}
}
)
);
}
Burada, belirteci, depolandığı yetkilendirme başlığından çıkarıyorsunuz; bu, istek gövdesinde saklamaktan çok daha güvenlidir.
Belirteç doğrulandıktan sonra, kullanıcı nesnesi istek gövdesine geri gönderilir. Kullanıcıları yetkilendirmek için korumalı rotalara pasaport JWT kimlik doğrulama ara yazılımını ekleyin.
app.get(
"/profil",
pasaport.authenticate("jwt", { oturum: yanlış }),
(req, res, sonraki) => {
res.send("Hoş Geldiniz");
}
);
Artık yalnızca geçerli bir belirteç sağlayan isteklere erişim sağlanacak.
Sonraki adımlar
Bu eğitici, kullanıcıların Google hesaplarını kullanarak uygulamanızda oturum açmak için Passport'u nasıl kullanabileceğinizi gösterdi. Passport'u kullanmak diğer formlardan çok daha basittir ve onu kullanarak çok zaman kazanacaksınız.
Passport ayrıca Twitter ve Facebook gibi diğer kimlik sağlayıcılarla kullanmak için başka kimlik doğrulama stratejileri de sağlar. Bu nedenle, bunları da kontrol etmeye değer.
Pasaport ve MongoDB Kullanarak NodeJS'de Kullanıcı Kimlik Doğrulaması
Sonrakini Oku
İlgili konular
- Programlama
- Güvenlik
- Programlama
- Programlama Araçları
- Google Kimlik Doğrulayıcı
Yazar hakkında
Mary Gathoni, yalnızca bilgilendirici değil aynı zamanda ilgi çekici teknik içerik yaratma tutkusuna sahip bir yazılım geliştiricisidir. Kod yazmadığı veya yazmadığı zamanlarda arkadaşlarıyla takılmaktan ve dışarıda olmaktan hoşlanıyor.
Haber bültenimize abone ol
Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!
Abone olmak için buraya tıklayın