-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpassport.js
167 lines (136 loc) · 5.98 KB
/
passport.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
var mongoose = require('mongoose');
var User = mongoose.model('User');
var path = require('path');
var fs = require('fs');
var UserDetails = mongoose.model('userInfo');
// Estrategia de autenticación con Twitter
var TwitterStrategy = require('passport-twitter').Strategy;
// Estrategia de autenticación con Facebook
var FacebookStrategy = require('passport-facebook').Strategy;
var LocalStrategy = require('passport-local').Strategy;
// Fichero de configuración donde se encuentran las API keys
// Este archivo no debe subirse a GitHub ya que contiene datos
// que pueden comprometer la seguridad de la aplicación.
//var config = require('./config');
// Exportamos como módulo las funciones de passport, de manera que
// podamos utilizarlas en otras partes de la aplicación.
// De esta manera, mantenemos el código separado en varios archivos
// logrando que sea más manejable.
module.exports = function(passport) {
// Serializa al usuario para almacenarlo en la sesión
passport.serializeUser(function(user, done) {
done(null, user._id);
});
// Deserializa el objeto usuario almacenado en la sesión para
// poder utilizarlo
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
// Configuración del autenticado con Twitter
passport.use(new TwitterStrategy({
consumerKey : "qRzI4I1nL52dPRxNf0w1v4Sp1",
consumerSecret : "dbP5zWL2vP2RiwFHhj8TdTQq6jeoyJNsYyFA8rEiiYFwX3Qorq",
callbackURL : '/auth/twitter/callback'
}, function(accessToken, refreshToken, profile, done) {
// Busca en la base de datos si el usuario ya se autenticó en otro
// momento y ya está almacenado en ella
User.findOne({provider_id: profile.id}, function(err, user) {
if(err) throw(err);
// Si existe en la Base de Datos, lo devuelve
if(!err && user!= null) return done(null, user);
var fotoHDTwitter = profile._json.profile_image_url;
var fotoHDTwitter__Replace = fotoHDTwitter.replace('_normal', '');
// Si no existe crea un nuevo objecto usuario
var user = new User({
provider_id : profile.id,
provider: profile.provider,
token: accessToken,
name: profile.displayName,
/*photo: profile.photos[0].value,*/
photo: fotoHDTwitter__Replace,
contenido: {
post: {
idPost: 0,
date: 'Reciente',
post: 'Hola gracias por unirte a viainti, disfruta de nuestra plataforma, viaja por el mundo con información exacta, escribe tu primer viaje y que conocistes. ',
imagen: 'http://www.que.es/archivos/201507/foodporn_nor-672xXx80.jpg'
}
}
});
//...y lo almacena en la base de datos
user.save(function(err) {
if(err) throw err;
done(null, user);
});
});
}));
//Helpers
//picture.type(large) para passport tomar la foto mas grande
// Configuración del autenticado con Facebook
passport.use(new FacebookStrategy({
clientID : "541508059389234",
clientSecret: "c06bb1203036fbaf7fb1bbc863d55e57",
callbackURL : '/auth/facebook/callback',
profileFields : ['id', 'displayName',/*'provider',*/ 'picture.type(large)', 'emails']
}, function(accessToken, refreshToken, profile, done) {
// El campo 'profileFields' nos permite que los campos que almacenamos
// se llamen igual tanto para si el usuario se autentica por Twitter o
// por Facebook, ya que cada proveedor entrega los datos en el JSON con
// un nombre diferente.
// Passport esto lo sabe y nos lo pone más sencillo con ese campo
User.findOne({provider_id: profile.id}, function(err, user) {
if(err) throw(err);
if(!err && user!= null) return done(null, user);
// Al igual que antes, si el usuario ya existe lo devuelve
// y si no, lo crea y salva en la base de datos
var user = new User({
provider_id: profile.id,
provider: profile.provider,
token: accessToken,
name: profile.displayName,
photo: profile.photos[0].value,
//cover: path.join(__dirname, '/uploads/coverusuarios/coverviainti.jpg'),
cover: 'http://cooldpandcovers.weebly.com/uploads/1/7/7/7/17779915/7193211_orig.jpg',
email: profile.emails[0].value,
/*posts: {
id: 0,
content: 'Hola gracias por unirte a viainti, disfruta de nuestra plataforma, viaja por el mundo con información exacta, escribe tu primer viaje y que conocistes. ',
imagen: 'http://www.que.es/archivos/201507/foodporn_nor-672xXx80.jpg',
date: 0,
type: 1
} */
});
user.save(function(err) {
if(err) throw err;
done(null, user);
});
});
}));
// Configuracion del autenticado local
/* passport.use(new LocalStrategy(function(username, password, photo, done) {
process.nextTick(function() {
User.findOne({
'email': email,
}, function(err, user) {
if (err) {
return done(err);
console.log('one');
}
if (!user) {
return done(null, false);
console.log('two');
}
if (user.password != password) {
return done(null, false);
console.log('tree');
}
console.log('hola edinson');
console.log(photo);
return done(null, user);
});
});
}));
*/
};