Login social con node.js
-
Upload
carlos-azaustre -
Category
Technology
-
view
30.060 -
download
1
description
Transcript of Login social con node.js
![Page 1: Login social con node.js](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/1.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/2.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/3.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/4.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/5.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/6.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/7.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/8.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/9.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/10.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/11.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/12.jpg)
Login Social con Node.js Comunidad Mejorando.la
Obtención de API Keys(Twitter)
![Page 13: Login social con node.js](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/13.jpg)
Login Social con Node.js Comunidad Mejorando.la
Obtención de API Keys(Facebook)
![Page 14: Login social con node.js](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/14.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/15.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/16.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051817/5481b553b4af9f6e0d8b45d1/html5/thumbnails/17.jpg)
Login Social con Node.js Comunidad Mejorando.la
Preguntas