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
Daha çok üye bilgisi almak için yapılacak değişiklikler ;
Model
passporjs eklemem gereken yerler ;
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.
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
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);
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)
}
)
Yorumlar
Yorum Gönder