-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpassport.js
More file actions
141 lines (92 loc) · 3.48 KB
/
Copy pathpassport.js
File metadata and controls
141 lines (92 loc) · 3.48 KB
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
'use strict';
module.exports = function(app , passport)
{
var FacebookStrategy = require('passport-facebook').Strategy;
var LocalStrategy = require('passport-local').Strategy;
var TwitterStrategy = require('passport-twitter').Strategy;
passport.use(new LocalStrategy(
function(username, password, done) {
process.nextTick(function(){
app.db.models.User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' , status : 401 });
}
if (!user.validatePassword(password)) {
return done(null, false, { message: 'Incorrect password.' , status : 401 });
}
return done(null, user);
});
});
}
));
passport.use(new FacebookStrategy({
//grant_type: 'fb_exchange_token',
clientID : app.config.oauth.facebook.clientID,
clientSecret : app.config.oauth.facebook.clientSecret,
callbackURL : app.config.oauth.facebook.callbackURL,
//enableProof : true
profileFields : ['id', 'name', 'email']
// fb_exchange_token: 'dcbb6647eea93e0f4f2e502edfab3f7b'
//passReqToCallback : true
},
function(accessToken , refreshToken , profile , done)
{
process.nextTick(function(){
app.db.models.User.findOne({'facebook.id' : profile.id},function(err , user){
if(err) return done(err);
if(user)
{
return done(null , user);
} else{
var newUser = new app.db.models.User();
newUser.facebook.id = profile.id; // set the users facebook id
newUser.facebook.token = accessToken; // we will save the token that facebook provides to the user
newUser.facebook.name = profile.name.givenName + ' ' + profile.name.familyName; // look at the passport user profile to see how names are returned
newUser.facebook.email = profile.emails[0].value; // facebook can return multiple emails so we'll take the first
newUser.save(function(err){
if(err) throw err;
return done(null , newUser);
});
}
});
});
}));
passport.use(new TwitterStrategy({
consumerKey : app.config.oauth.twitter.consumerKey,
consumerSecret : app.config.oauth.twitter.consumerSecret,
callbackURL : app.config.oauth.twitter.callbackURL
},
function(token , tokenSecret , profile ,done)
{
process.nextTick(function(){
app.db.models.User.findOne({'twitter.id' : profile.id}, function(err , user){
if(err) return done(err);
if(user)
{
return done(null , user);
}
else{
var newUser = new app.db.models.User();
newUser.twitter.id = profile.id;
newUser.twitter.token = token;
newUser.twitter.username = profile.username;
newUser.twitter.displayName = profile.displayName;
newUser.save(function(err){
if(err) throw err;
return done(null , newUser);
});
}
});
});
}));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
// used to deserialize the user
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
};