login social con node.js

17
Login Social con Node.js Comunidad Mejorando.la Login social con Node.js Gestión de usuarios con PassportJS

Upload: carlos-azaustre

Post on 05-Dec-2014

30.058 views

Category:

Technology


1 download

DESCRIPTION

Presentación para la clase BONUS de Mejorando.la

TRANSCRIPT

Page 1: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Login social con Node.jsGestión de usuarios con PassportJS

Page 2: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

¿Qué es PassportJS?

Middleware de autenticación para Node.js, que facilita la autenticación y registro de usuarios de una aplicación web.

http://passportjs.org

Page 3: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

¿Qué necesitamos?

● Instalar Node.jshttp://nodejs.org/download/

● Instalar MongoDBhttps://www.mongodb.org/downloads

Page 4: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

¡Comenzamos!

Creamos una estructura base de aplicación con el framework Express

Instalamos las dependencias que vamos a utilizar

$ sudo npm install -g express$ express passport-example$ cd passport-example$ npm install

$ npm install --save mongoose$ npm install --save passport$ npm install --save passport-twitter$ npm install --save passport-facebook

Page 5: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Modelo usuario

models/user.js

var mongoose = require('mongoose');var Schema = mongoose.Schema;

var UserSchema = new Schema({name: String,provider: String,provider_id: {type: String, unique: true},photo: String,createdAt: {type: Date, default: Date.now}

});

var User = mongoose.model('User', UserSchema);

Page 6: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Configuración de Passport

passport.jsvar mongoose = require('mongoose');var User = mongoose.model('User');var TwitterStrategy = require('passport-twitter').Strategy;var FacebookStrategy = require('passport-facebook').Strategy;

module.exports = function(passport) {

passport.serializeUser(function(user, done) {done(null, user);

});

passport.deserializeUser(function(obj, done) {done(null, obj);

});. . .

Page 7: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Configuración de Passport (Twitter)

passport.js. . .passport.use(new TwitterStrategy({

consumerKey: 'TWITTER_CONSUMER_KEY',consumerSecret: 'TWITTER_CONSUMER_SECRET',callbackURL: '/auth/twitter/callback'

}, function(accessToken, refreshToken, profile, done) {User.findOne({provider_id: profile.id}, function(err, user) {

if(err) throw(err);if(!err && user!= null) return done(null, user);

var user = new User({provider_id: profile.id,provider: profile.provider,name: profile.displayName,photo: profile.photos[0].value

});user.save(function(err) {

if(err) throw err;done(null, user);

});});

}));

Page 8: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Configuración de Passport (Facebook)

passport.js. . .passport.use(new FacebookStrategy({

clientID: 'FACEBOOK_APP_CLIENT_ID',clientSecret: 'FACEBOOK_APP_SECRET_ID',callbackURL: '/auth/twitter/callback'

}, function(accessToken, refreshToken, profile, done) {User.findOne({provider_id: profile.id}, function(err, user) {

if(err) throw(err);if(!err && user!= null) return done(null, user);

var user = new User({provider_id: profile.id,provider: profile.provider,name: profile.displayName,photo: profile.photos[0].value

});user.save(function(err) {

if(err) throw err;done(null, user);

});});

}));

Page 9: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Mantener las API KEYs apartadas del código fuente

config.js passport.js. . .var config = { twitter: { key: ‘TWITTER_API_KEY’, secret: ‘TWITTER_API_SECRET’ }, facebook: { id: ‘FACEBOOK_APP_ID’, secret: ‘FACEBOOK_APP_SECRET’ }};

module.exports = config;

var config = require(‘./config’);. . .passport.use(new TwitterStrategy({ consumerKey: 'config.twitter.key', consumerSecret: 'config.twitter.secret', callbackURL: '/auth/twitter/callback'. . .passport.use(new FacebookStrategy({ clientID: 'config.facebook.id', clientSecret: 'config.facebook.secret', callbackURL: '/auth/twitter/callback'. . .

Page 10: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Conjuntando todo

app.js...var mongoose = require('mongoose');var passport = require('passport');require('./models/user');require('./passport')(passport);

mongoose.connect('mongodb://localhost/passport-example', function(err, res) { if(err) throw err; console.log('Conectado con éxito a la BD');});…app.use(express.cookieParser());app.use(express.urlencoded());app.use(express.json());app.use(express.methodOverride());app.use(express.session({ secret: 'secretkey' }));

// Configuración de Passportapp.use(passport.initialize());app.use(passport.session());...

// Rutas de Passportapp.get('/logout', function(req, res) { req.logout(); res.redirect('/');});app.get('/auth/twitter', passport.authenticate('twitter'));app.get('/auth/facebook', passport.authenticate('facebook'));app.get('/auth/twitter/callback', passport.authenticate('twitter', { successRedirect: '/', failureRedirect: '/login' }));app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/', failureRedirect: '/login' }));...

Page 11: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Registro de App en FB/TWAcceder a la sección “Desarrolladores” de Facebook y Twitter para registrar una App y adquirir un API Key y un API Secret

http://dev.twitter.com http://developers.facebook.com

Page 12: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Obtención de API Keys(Twitter)

Page 13: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Obtención de API Keys(Facebook)

Page 14: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Controlador de la vista principal

routes/index.jsLe indicamos que variables queremos que se visualicen en el HTML

views/index.jade

exports.index = function(req, res){ res.render('index', { title: 'Passport-Example', user: req.user });};

if(user) ul li img(src="#{user.photo}") li Bienvenido #{user.name} li a(href='logout') Salir

else ul li a(href='auth/twitter') Login con Twitter li a(href='auth/facebook') Login con Facebook

Page 15: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

¡Y voilá!

Código disponible en:http://github.com/carlosazaustre/passportjs-example

$ mongod &$ node app.js

Page 16: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

¡Gracias!

Carlos AzaustreDesarrollador Web / JavaScript Lover / MOOC Addict / Based in Madrid,Spain

carlosazaustre.es/blog @carlosazaustre /carlosazaustre.web /carlosazaustre /+CarlosAzaustre

Page 17: Login social con node.js

Login Social con Node.js Comunidad Mejorando.la

Preguntas