Passport Js ile Express.js kullanımı

Bu blogda back-end imize kullanıcıların google kimlikleri ile girişini işleyecez. Kullanıcılarımız google hesapları ile giriş yapacak ardından onlara session açıp cookie kuracağız ve kullanıcımızı veri tabanımıza kayıt edeceğiz. Kullanıcı tekrar giriş yaparsa veri tabanımızda sorgulayıp daha önce kayıt olmuş ise tekrar kayıt etmeyeceğiz.

Gerekli olan kütüphaneleri anadizime indiriyorum;

npm i --save passport passport-google-oauth20

https://console.developers.google.com

Adresine girip yeni bir proje oluşturun. ENABLE APIS AND SERVİCES seçin.
Arama kısmına Goole plus yazın aşağıdakini seçin ve ENABLE yapın.


Google+ API

Google

The Google+ API enables developers to build on top of the Google+ platform.


Sol taraftaki menüden Credentials ı seçin ardından Create Credentials ardından Oauth Create
Kendi yönlendirme adresinize göre seçin ve Create deyin size verdiği Publish ve secret keyleri kaydedin bunlar çok önemli.

Keylerimi ben config altındaki klasörde tutuyorum. Tutuş şeklim config/dev.js
module.exports = {
mongoURI: 'mongodb:@ds016108.mlab.com:16108/blog',
googleClientID: '683421410698-smuadevnaof8hq906d00reia3ida7u9.apps.googleusercontent.com',
googleClientSecret: '6gBZBM9yg2KHUnzeTBrNDcm'
}

Lütfen kendi keylerinizi yazın.

Şimdi ana dizindeyken mkdir services komutuyla klasör oluşturuyorum içine Authenticate işlemlerimi yapacağım passport.js daha sonra bunu index den çağıracağım

const passport = require('passport');
const GoogleStragety = require('passport-google-oauth20').Strategy;
const mongoose = require('mongoose');
const keys = require('../config/key');

const User = mongoose.model('members'); //Mongoose Model Schemas name

passport.serializeUser((user, done) => {
done(null, user.id);
});

passport.deserializeUser((id, done) => {
done(null, user );
});

passport.use(
new GoogleStragety (
{
clientID: keys.googleClientID,
clientSecret: keys.googleClientSecret,
callbackURL: 'auth/google/callback',
proxy: true
},
async(accessToken, refreshToken, profile, done ) => {
const existingUser = await User.findOne ( { googleId: profile.id});
if (existingUser) {
return done(null, existingUser );
}
const user = await new User ({ googleId: profile.id }).save();
done(null, user)
}
)
);

  Şimdide authRoutes dosyasını oluşturuyorum Anadizin/routes/authRoutes
const passport = require('passport');

module.exports = app => {
app.get('/auth/google', passport.authenticate('google', {
scope: [ 'profile', 'email']
}))
app.get('auth/google/callback', passport.authenticate('google'),
(req, res) => {
res.redirect('/articles');
})
app.get('/api/current_user', ( req, res) => {
res.send(req.user);
})
app.get('/api/logout', (req, res ) => {
reg.logout();
res.redirect('/');
})
}

1.router Log in olmak için giriş
2.router callback yani google aouth un dönüş yaptığı yer. Google console dada belirtmiştik
3. Anlık kullanıcıyı görmemiz için
4. ise çıkış için.

Şimdi index e gidip session kuracağız ve oluşturduğumuz bu dosyları index den çağıracağız.

npm i --save cookie-session body-parser

cookie kullancağım için config dosyamdaki keys lere
cookieKey:'abcdefghklmn123456665542236'
eklemem gerekir
index sayfası
const express = require('express');
const mongoose = require('mongoose');

//Mongoose Model Area
const keys = require('./config/key');
require('./models/article');
require('./models/comments');
require('./models/members');

//Services Area
require('./services/passport');

mongoose.connect(keys.mongoURI);
const app = express();

app.use(bodyParser.json());
app.use(
cookieSession({
maxAge: 30 * 24 * 60 *60 * 1000, //set a mounts cookie
keys:[keys.cookieKey]
})
)

app.use(passport.initialize()); // I have to use them which about cookie use
app.use(passport.session());

require('./routes/articleRoutes')(app);
require('./routes/authRoutes')(app);


const PORT = process.env.PORT || 5500;
app.listen(PORT);

Daha çok üye bilgisi almak için yapılacak değişiklikler ;
const mongoose = require('mongoose');
const { Schema } = mongoose;

const memberSchema = new Schema({
googleId: String,
name: String,
position: { type: Number, default:0 },
gender: String
// normal members are 0 but writer:1
})
mongoose.model('members', memberSchema);
 Model

passporjs eklemem gereken yerler ;
passport.use(
new GoogleStragety (
{
clientID: keys.googleClientID,
clientSecret: keys.googleClientSecret,
callbackURL: '/auth/auth/google/callback',
proxy: true
},
async(accessToken, refreshToken, profile, done ) => {
console.log(profile)
const existingUser = await User.findOne ( { googleId: profile.id});
if (existingUser) {
return done(null, existingUser );
}
const user = await new User ({ googleId: profile.id, name: profile.displayName, gender: profile.gender }).save();
done(null, user)
}
)
callback url zi değiştirebilirsiniz. Benim boş olduğu için cannot page hatası alıyorum yukarıdaki işlemleri yaptıysanız mongodb nizde member collectionu oluştu ise iş tamamdır.

Yorumlar

Bu blogdaki popüler yayınlar

React JS Yazalım 1

Heroku deploy

Laravel & React 4