Browse Source

asyn/await/modular google

sou 7 năm trước cách đây
mục cha
commit
c5120b3e25
1 tập tin đã thay đổi với 34 bổ sung26 xóa
  1. 34 26
      lib/routes/login-passport.js

+ 34 - 26
lib/routes/login-passport.js

@@ -250,35 +250,15 @@ module.exports = function(crowi, app) {
     })(req, res);
   };
 
-  const loginPassportGoogleCallback = async function(req, res, next) {
+  const loginPassportGoogleCallback = async(req, res, next) => {
     const provider = 'google';
     const response = await __promisifiedPassportAuthentication(req, res, provider);
-    let externalAccount;
-
-    try {
-      externalAccount = await ExternalAccount.findOrRegister(
-        provider,
-        response.id,
-        response.displayName,
-        `${response.name.givenName} ${response.name.familyName}`
-      );
+    const userInfo = {
+      'id': response.id,
+      'username': response.displayName,
+      'name': `${response.name.givenName} ${response.name.familyName}`
     }
-    catch (err) {
-      if (err.name === 'DuplicatedUsernameException') {
-        // get option
-        const isSameUsernameTreatedAsIdenticalUser = Config.isSameUsernameTreatedAsIdenticalUser(config, provider);
-        if (isSameUsernameTreatedAsIdenticalUser) {
-          // associate to existing user
-          debug(`ExternalAccount '${response.displayName}' will be created and bound to the exisiting User account`);
-          return ExternalAccount.associate(provider, response.id, err.user);
-        }
-        else {
-          req.flash('provider-DuplicatedUsernameException', provider);
-          return next();
-        }
-      }
-    }
-
+    const externalAccount = await getOrCreateUser(req, next, userInfo, provider);
     const user = await externalAccount.getPopulatedUser();
 
     // login
@@ -297,6 +277,34 @@ module.exports = function(crowi, app) {
     });
   };
 
+  const getOrCreateUser = async(req, next, userInfo, provider) => {
+    try {
+      const externalAccount = await ExternalAccount.findOrRegister(
+        provider,
+        userInfo.id,
+        userInfo.username,
+        userInfo.name
+      );
+      return externalAccount;
+    }
+    catch (err) {
+      if (err.name === 'DuplicatedUsernameException') {
+        // get option
+        const isSameUsernameTreatedAsIdenticalUser = Config.isSameUsernameTreatedAsIdenticalUser(config, provider);
+        if (isSameUsernameTreatedAsIdenticalUser) {
+          // associate to existing user
+          debug(`ExternalAccount '${userInfo.username}' will be created and bound to the exisiting User account`);
+          return ExternalAccount.associate(provider, userInfo.id, err.user);
+        }
+        else {
+          req.flash('provider-DuplicatedUsernameException', provider);
+          return next();
+        }
+      }
+      throw err;  // throw again
+    }
+  }
+
   return {
     loginFailure,
     loginWithLdap,