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

Form の validation error などが発生したときに Google Auth の認証がおかしくなる問題を修正

Sotaro KARASAWA 11 лет назад
Родитель
Сommit
0672a17845
1 измененных файлов с 14 добавлено и 3 удалено
  1. 14 3
      lib/routes/login.js

+ 14 - 3
lib/routes/login.js

@@ -37,6 +37,8 @@ module.exports = function(app) {
     var nextAction = req.session.googleCallbackAction || '/login';
     var nextAction = req.session.googleCallbackAction || '/login';
     debug('googleCallback.nextAction', nextAction);
     debug('googleCallback.nextAction', nextAction);
     req.session.googleAuthCode = req.query.code || '';
     req.session.googleAuthCode = req.query.code || '';
+    debug('google auth code', req.query.code);
+
 
 
     return res.redirect(nextAction);
     return res.redirect(nextAction);
   };
   };
@@ -230,22 +232,29 @@ module.exports = function(app) {
     } else { // method GET
     } else { // method GET
       // google callback を受ける可能性もある
       // google callback を受ける可能性もある
       var code = req.session.googleAuthCode || null;
       var code = req.session.googleAuthCode || null;
+      var googleId = req.session.googleId || null;
+      var googleEmail = req.session.googleEmail || null;
 
 
       debug('register. if code', code);
       debug('register. if code', code);
+      // callback 経由で reigster にアクセスしてきた時最初だけこの if に入る
+      // code から email などを取得したらそれを session にいれて code は消去
       if (code) {
       if (code) {
         googleAuth.handleCallback(req, function(err, tokenInfo) {
         googleAuth.handleCallback(req, function(err, tokenInfo) {
+          debug('tokenInfo', tokenInfo);
+          req.session.googleAuthCode = null;
+
           if (err) {
           if (err) {
             req.flash('registerWarningMessage', 'Googleコネクト中にエラーが発生しました。');
             req.flash('registerWarningMessage', 'Googleコネクト中にエラーが発生しました。');
             return res.redirect('/login?register=1'); // TODO Handling
             return res.redirect('/login?register=1'); // TODO Handling
           }
           }
 
 
-          var googleId = tokenInfo.user_id;
-          var googleEmail = tokenInfo.email;
+          req.session.googleId = googleId = tokenInfo.user_id;
+          req.session.googleEmail = googleEmail = tokenInfo.email;
+
           if (!User.isEmailValid(googleEmail)) {
           if (!User.isEmailValid(googleEmail)) {
             req.flash('registerWarningMessage', 'このメールアドレスのGoogleアカウントはコネクトできません。');
             req.flash('registerWarningMessage', 'このメールアドレスのGoogleアカウントはコネクトできません。');
             return res.redirect('/login?register=1');
             return res.redirect('/login?register=1');
           }
           }
-
           return res.render('login', {
           return res.render('login', {
             googleId: googleId,
             googleId: googleId,
             googleEmail: googleEmail,
             googleEmail: googleEmail,
@@ -253,6 +262,8 @@ module.exports = function(app) {
         });
         });
       } else {
       } else {
         return res.render('login', {
         return res.render('login', {
+          googleId: googleId,
+          googleEmail: googleEmail,
         });
         });
       }
       }
     }
     }