Răsfoiți Sursa

Merge branch 'fix-google2' into wip-v1.5.0

Sotaro KARASAWA 9 ani în urmă
părinte
comite
a7971ae03f
5 a modificat fișierele cu 36 adăugiri și 15 ștergeri
  1. 16 3
      lib/routes/login.js
  2. 16 8
      lib/routes/me.js
  3. 1 1
      lib/views/login.html
  4. 1 1
      package.json
  5. 2 2
      resource/css/crowi.scss

+ 16 - 3
lib/routes/login.js

@@ -12,12 +12,23 @@ module.exports = function(crowi, app) {
     , Revision = crowi.model('Revision')
     , actions = {};
 
+
+  var clearGoogleSession = function(req) {
+      req.session.googleAuthCode
+        = req.session.googleId
+        = req.session.googleEmail
+        = req.session.googleName
+        = req.session.googleImage
+        = null;
+  };
   var loginSuccess = function(req, res, userData) {
     req.user = req.session.user = userData;
     if (!userData.password) {
       return res.redirect('/me/password');
     }
 
+    clearGoogleSession(req);
+
     var jumpTo = req.session.jumpTo;
     if (jumpTo) {
       req.session.jumpTo = null;
@@ -214,10 +225,11 @@ module.exports = function(crowi, app) {
                   googleImage.replace(/^.+\/(.+\..+)$/, '$1')
                 );
 
-                axios.get(googleImage)
+                axios.get(googleImage, {responseType: 'stream'})
                 .then(function(response) {
                   var type = response.headers['content-type'];
                   var fileStream = response.data;
+                  fileStream.length = parseInt(response.headers['content-length']);
 
                   fileUploader.uploadFile(filePath, type, fileStream, {})
                   .then(function(data) {
@@ -243,6 +255,7 @@ module.exports = function(crowi, app) {
       });
     } else { // method GET of form is not valid
       debug('session is', req.session);
+      var isRegistering = true;
       // google callback を受ける可能性もある
       var code = req.session.googleAuthCode || null;
       var googleId = req.session.googleId || null;
@@ -272,10 +285,10 @@ module.exports = function(crowi, app) {
             req.flash('registerWarningMessage', 'このメールアドレスのGoogleアカウントはコネクトできません。');
             return res.redirect('/login?register=1');
           }
-          return res.render('login', { googleId, googleEmail, googleName, googleImage, });
+          return res.render('login', { isRegistering, googleId, googleEmail, googleName, googleImage, });
         });
       } else {
-        return res.render('login', { googleId, googleEmail, googleName, googleImage, });
+        return res.render('login', { isRegistering, googleId, googleEmail, googleName, googleImage, });
       }
     }
   };

+ 16 - 8
lib/routes/me.js

@@ -235,16 +235,24 @@ module.exports = function(crowi, app) {
         req.flash('warningMessage.auth.google', 'このメールアドレスのGoogleアカウントはコネクトできません。');
         return res.redirect('/me');
       }
-      userData.updateGoogleId(googleId, function(err, userData) {
-        if (err) {
-          debug('Failed to updateGoogleId', err);
-          req.flash('warningMessage.auth.google', 'Failed to connect Google Account');
+
+      User.findUserByGoogleId(googleId, function(err, googleUser) {
+        if (!err && googleUser) {
+          req.flash('warningMessage.auth.google', 'このGoogleアカウントは他のユーザーがコネクト済みです。');
           return res.redirect('/me');
-        }
+        } else {
+          userData.updateGoogleId(googleId, function(err, userData) {
+            if (err) {
+              debug('Failed to updateGoogleId', err);
+              req.flash('warningMessage.auth.google', 'Failed to connect Google Account');
+              return res.redirect('/me');
+            }
 
-        // TODO if err
-        req.flash('successMessage', 'Googleコネクトを設定しました。');
-        return res.redirect('/me');
+            // TODO if err
+            req.flash('successMessage', 'Googleコネクトを設定しました。');
+            return res.redirect('/me');
+          });
+        }
       });
     });
   };

+ 1 - 1
lib/views/login.html

@@ -15,7 +15,7 @@
 
 <div class="login-dialog-container flip-container col-md-5">
 
-<div class="login-dialog flipper {% if req.query.register or req.body.registerForm or googleId %}to-flip{% endif %}" id="login-dialog">
+<div class="login-dialog flipper {% if req.query.register or req.body.registerForm or isRegistering or googleId %}to-flip{% endif %}" id="login-dialog">
 
   <div class="login-dialog-inner front">
     <h2>ログイン</h2>

+ 1 - 1
package.json

@@ -30,7 +30,7 @@
   "dependencies": {
     "async": "~1.5.0",
     "aws-sdk": "~2.2.26",
-    "axios": "0.9.x",
+    "axios": "0.13.x",
     "babel-core": "~6.7.6",
     "babel-loader": "~6.2.4",
     "babel-preset-es2015": "~6.6.0",

+ 2 - 2
resource/css/crowi.scss

@@ -206,8 +206,8 @@ footer {
 
   // size list
   &.picture-lg {
-    width: 32px;
-    height: 32px;
+    width: 48px;
+    height: 48px;
   }
   &.picture-sm {
     width: 16px;