Просмотр исходного кода

wip: create external account and user

sou 7 лет назад
Родитель
Сommit
6a39b8469e
4 измененных файлов с 41 добавлено и 27 удалено
  1. 2 1
      lib/routes/index.js
  2. 24 0
      lib/routes/login-passport.js
  3. 13 23
      lib/service/passport.js
  4. 2 3
      lib/views/login.html

+ 2 - 1
lib/routes/index.js

@@ -69,7 +69,8 @@ module.exports = function(crowi, app) {
 
 
   // OAuth
   // OAuth
   app.post('/_api/admin/security/passport-google', loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.securityPassportGoogle, admin.api.securityPassportGoogleSetting);
   app.post('/_api/admin/security/passport-google', loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.securityPassportGoogle, admin.api.securityPassportGoogleSetting);
-  // app.get('/auth/passport/google/callback', loginPassport.loginPassportGoogleCallback);
+  app.get('/passport/google', loginPassport.loginPassportGoogle);
+  app.get('/passport/google/callback', loginPassport.loginPassportGoogleCallback);
 
 
   // markdown admin
   // markdown admin
   app.get('/admin/markdown'                   , loginRequired(crowi, app) , middleware.adminRequired() , admin.markdown.index);
   app.get('/admin/markdown'                   , loginRequired(crowi, app) , middleware.adminRequired() , admin.markdown.index);

+ 24 - 0
lib/routes/login-passport.js

@@ -239,10 +239,34 @@ module.exports = function(crowi, app) {
     })(req, res, next);
     })(req, res, next);
   };
   };
 
 
+  const loginPassportGoogle = function(req, res) {
+    if (!passportService.isGoogleStrategySetup) {
+      debug('GoogleStrategy has not been set up');
+      return;
+    }
+
+    passport.authenticate('google', {
+      scope: ['profile']
+    })(req, res);
+  };
+
+  const loginPassportGoogleCallback = function(req, res, next) {
+    console.log('loginPassportGoogleCallback');
+    passport.authenticate('google', { failureRedirect: '/login' }, (req, res) => {
+      // Do something here
+      console.log(req, '---------req')
+      console.log(res, '---------res')
+
+    })(req, res, next);
+    return res.redirect('/');
+  };
+
   return {
   return {
     loginFailure,
     loginFailure,
     loginWithLdap,
     loginWithLdap,
     testLdapCredentials,
     testLdapCredentials,
     loginWithLocal,
     loginWithLocal,
+    loginPassportGoogle,
+    loginPassportGoogleCallback,
   };
   };
 };
 };

+ 13 - 23
lib/service/passport.js

@@ -2,7 +2,8 @@ const debug = require('debug')('growi:service:PassportService');
 const passport = require('passport');
 const passport = require('passport');
 const LocalStrategy = require('passport-local').Strategy;
 const LocalStrategy = require('passport-local').Strategy;
 const LdapStrategy = require('passport-ldapauth');
 const LdapStrategy = require('passport-ldapauth');
-const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
+// const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
+const GoogleStrategy = require('passport-google-oauth20').Strategy;
 
 
 /**
 /**
  * the service class of Passport
  * the service class of Passport
@@ -264,31 +265,20 @@ class PassportService {
 
 
     debug('GoogleStrategy: setting up..');
     debug('GoogleStrategy: setting up..');
 
 
-    // passport.use(new LdapStrategy(this.getLdapConfigurationFunc(config, {passReqToCallback: true}),
-    //   (req, ldapAccountInfo, done) => {
-    //     debug('LDAP authentication has succeeded', ldapAccountInfo);
-
-    //     // store ldapAccountInfo to req
-    //     req.ldapAccountInfo = ldapAccountInfo;
-
-    //     done(null, ldapAccountInfo);
-    //   }
-    // ));
-    console.log(config.crowi['security:passport-google:clientId'])
-    console.log(config.crowi['security:passport-google:clientSecret'])
-
     passport.use(new GoogleStrategy({
     passport.use(new GoogleStrategy({
       clientID: config.crowi['security:passport-google:clientId'],
       clientID: config.crowi['security:passport-google:clientId'],
       clientSecret: config.crowi['security:passport-google:clientSecret'],
       clientSecret: config.crowi['security:passport-google:clientSecret'],
-      callbackURL: '/auth/passport/google/callback',
-    },
-    function(accessToken, refreshToken, profile, done) {
-      console.log(profile)
-      // User.findOrCreate({ googleId: profile.id }, function(err, user) {
-      //   return done(err, user);
-      // });
-    }
-    ));
+      callbackURL: '/passport/google/callback',
+    }, function(accessToken, refreshToken, profile, done) {
+      // Do something here
+      console.log(profile);
+      if (profile) {
+        return done(null, profile);
+      }
+      else {
+        return done(null, false);
+      }
+    }));
 
 
     this.isGoogleStrategySetup = true;
     this.isGoogleStrategySetup = true;
     debug('GoogleStrategy: setup is done');
     debug('GoogleStrategy: setup is done');

+ 2 - 3
lib/views/login.html

@@ -148,11 +148,10 @@
         <hr>
         <hr>
         <div class="input-group m-t-15 m-b-10 mx-auto d-flex flex-row justify-content-around flex-wrap">
         <div class="input-group m-t-15 m-b-10 mx-auto d-flex flex-row justify-content-around flex-wrap">
           {#% if passportGoogleLoginEnabled() %#}
           {#% if passportGoogleLoginEnabled() %#}
-          <form role="form" action="/auth/passport/google" method="get">
-            <input type="hidden" name="_csrf" value="{{ csrf() }}">
+          <form role="form" action="/passport/google" method="get">
             <button type="submit" class="fcbtn btn btn-danger btn-1b btn-login-google">
             <button type="submit" class="fcbtn btn btn-danger btn-1b btn-login-google">
               <span class="btn-label"><i class="icon-social-google"></i></span>
               <span class="btn-label"><i class="icon-social-google"></i></span>
-              {{ t('Sign in') }}(passport)
+              {{ t('Sign in') }}
             </button>
             </button>
             <div class="small text-right">by Google Account</div>
             <div class="small text-right">by Google Account</div>
           </form>
           </form>