TwoToc code
[YouAndWeb_TwoToc] / server / auth / google / passport.js
diff --git a/server/auth/google/passport.js b/server/auth/google/passport.js
new file mode 100755 (executable)
index 0000000..72edb09
--- /dev/null
@@ -0,0 +1,39 @@
+var passport = require('passport');
+var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
+
+exports.setup = function(User, config) {
+  passport.use(new GoogleStrategy({
+    clientID: config.google.clientID,
+    clientSecret: config.google.clientSecret,
+    callbackURL: config.google.callbackURL
+  },
+  function(accessToken, refreshToken, profile, done) {
+    User.findOneAsync({
+      'google.id': profile.id
+    })
+      .then(function(user) {
+        if (!user) {
+          user = new User({
+            name: profile.displayName,
+            email: profile.emails[0].value,
+            role: 'user',
+            username: profile.emails[0].value.split('@')[0],
+            provider: 'google',
+            google: profile._json
+          });
+          user.saveAsync()
+            .then(function(user) {
+              return done(null, user);
+            })
+            .catch(function(err) {
+              return done(err);
+            });
+        } else {
+          return done(null, user);
+        }
+      })
+      .catch(function(err) {
+        return done(err);
+      });
+  }));
+};