24.05.2020

Express, Passport, Oauth, Google

Herkese merhaba, size bayram şekeri tadında bir yazı hazırlamaya çalıştım. :) Birlikte Express ile Passport kullanarak Google OAuth örneği yapacağız.



Genelde akış aşağı yukarı şöyle olmalı:

  • Kullanıcı login linkine tıklar
  • Kullanıcı kimliğini doğrulamak üzere Google'a yönlendirilir
  • Google doğrulanan kullanıcı bilgisi ile verdiğimiz URL'e yönlendirme yapar.
  • Uygulamada kullanıcı kayıt ya da giriş işlemleri tamamlanır.
Biz işi basitleştirmek için kullanıcının login linkine tıkladığını varsayacak ve doğrudan http://localhost:3000/auth adresine gideceğiz. Kullanıcı kayıt/giriş işlemi yapmak yerine de Google'dan aldığımız e-posta ve isim bilgisini ekranda göstereceğiz. 




Öncelikle Google Developer Console'unda yeni bir proje oluşturmamız ve uygulamamız için Oauth kimlik bilgilerini almamız gerekiyor. Bunun için elbette bir de Google hesabınız olmalı. https://console.developers.google.com/apis/dashboard adresinden giriş yapıp yeni bir proje oluşturalım.

New Project linkine tıkladıktan sonra projeye isim verip create diyelim.

Console'un üst kısmında yeni oluşturduğumuz projeyi seçip, sol menüdeki "OAuth consent screen" linkine tıklayarak; uygulamamızın kimlik doğrulaması sırasında Google'ın göstereceği izin ekranını özelleştirelim. User Type için External seçerek create butonuna tıklayalım. Buradaki seçenekleri size uygun gelen şekilde doldurabilirsiniz. Ben bu örnek için sadece Application Name alanını doldurup geçiyorum.

Sonra sol menüden Credentials linkine tıklayalım. Önce "+ Create Credentials" linkine sonra da OAuth client ID linkine tıklayalım. Aşağıdaki ekran görüntüsündeki bilgileri girip, create butonuna basalım.


Oluşan kimlik bilgileri ile ilgili bir popup göreceksiniz. Burada size verilen Client ID ve Client Secret bilgilerini bir yere kaydedin. Google ile işimiz şimdilik bu kadar. Artık Node projemizi hazırlamaya başlayabiliriz.

Terminalde sırayla aşağıdaki komutları çalıştırarak projemizi hazırlayalım.

Tüm komutlar tamamlandıktan sonra package.json dosyasını açıp scripts kısmına "start": "node index.js" satırını ekleyelim.

Package.json dosyası aşağıdaki gibi olmalı.


Google'dan aldığımız kimlik bilgilerini tutacağımız bir .env dosyası oluşturalım XXXXX yazan yerleri kendi bilgilerinizle değiştirmelisiniz.



Gerçek bir uygulamada kullanıcı kayıtları makul bir yerde (örneğin bir veritabanında) tutulmalı, kullanıcılar oturum açtığında bu oturum bilgisi takip edilmeli. Ancak biz bu örnekte o detaylara girmeyecek, kullanıcı bilgisini bir User.js sınıfı ile tanımlayıp, session isimli bir js array'inde tutacağız. User sınıfını ve uygulamanın index dosyasını aşağıda görebilirsiniz.



Terminalden "npm start" ile projeyi çalıştırdıktan sonra tarayıcınızda "http://localhost:3000/auth" adresine giderseniz, öncelikle Google'a yönlendirilecek, izin vermeniz halinde de uygulamaya geri yönlendirileceksiniz. Her şey yolunda giderse profil sayfasında adınızı ve e-posta adresinizi görmelisiniz. :)

Bu örneği bir çok farklı OAuth servisi ile (Github, Facebook...) yeniden deneyebilirsiniz. Ufak farklılıklar olacaktır ancak temelde aynı prensipler geçerli. Npm ile express-session kurup Passport'un ayarlarını yaparak düzgün bir session tutabilirsiniz. MongoDB ile kullanıcılarınızı veri tabanında saklayabilir session bilgilerini de aynı veri tabanına yazabilirsiniz.

Esen kalın.