2
0
Эх сурвалжийг харах

Merge branch 'fix-google-oauth' into v1.1.2

Sotaro KARASAWA 11 жил өмнө
parent
commit
15ff531b12

+ 1 - 1
lib/form/register.js

@@ -4,7 +4,7 @@ var form = require('express-form')
   , field = form.field;
 
 module.exports = form(
-  field('registerForm.username').required().is(/^[\da-zA-Z\-_]+$/),
+  field('registerForm.username').required().is(/^[\da-zA-Z\-_\.]+$/),
   field('registerForm.name').required(),
   field('registerForm.email').required(),
   field('registerForm.password').required().is(/^[\da-zA-Z@#$%-_&\+\*\?]{6,64}$/),

+ 16 - 4
lib/routes/login.js

@@ -37,6 +37,8 @@ module.exports = function(app) {
     var nextAction = req.session.googleCallbackAction || '/login';
     debug('googleCallback.nextAction', nextAction);
     req.session.googleAuthCode = req.query.code || '';
+    debug('google auth code', req.query.code);
+
 
     return res.redirect(nextAction);
   };
@@ -133,7 +135,6 @@ module.exports = function(app) {
   };
 
   actions.register = function(req, res) {
-    var registerForm = req.form.registerForm || {};
     var googleAuth = require('../util/googleAuth')(app);
 
     // ログイン済みならさようなら
@@ -147,6 +148,8 @@ module.exports = function(app) {
     }
 
     if (req.method == 'POST' && req.form.isValid) {
+      var registerForm = req.form.registerForm || {};
+
       var name = registerForm.name;
       var username = registerForm.username;
       var email = registerForm.email;
@@ -229,22 +232,29 @@ module.exports = function(app) {
     } else { // method GET
       // google callback を受ける可能性もある
       var code = req.session.googleAuthCode || null;
+      var googleId = req.session.googleId || null;
+      var googleEmail = req.session.googleEmail || null;
 
       debug('register. if code', code);
+      // callback 経由で reigster にアクセスしてきた時最初だけこの if に入る
+      // code から email などを取得したらそれを session にいれて code は消去
       if (code) {
         googleAuth.handleCallback(req, function(err, tokenInfo) {
+          debug('tokenInfo', tokenInfo);
+          req.session.googleAuthCode = null;
+
           if (err) {
             req.flash('registerWarningMessage', 'Googleコネクト中にエラーが発生しました。');
             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)) {
             req.flash('registerWarningMessage', 'このメールアドレスのGoogleアカウントはコネクトできません。');
             return res.redirect('/login?register=1');
           }
-
           return res.render('login', {
             googleId: googleId,
             googleEmail: googleEmail,
@@ -252,6 +262,8 @@ module.exports = function(app) {
         });
       } else {
         return res.render('login', {
+          googleId: googleId,
+          googleEmail: googleEmail,
         });
       }
     }

+ 3 - 3
lib/util/googleAuth.js

@@ -20,7 +20,7 @@ module.exports = function(app) {
   }
 
   lib.createAuthUrl = function(req, callback) {
-    var callbackUrl = req.baseUrl + '/google/callback';
+    var callbackUrl = config.crowi['app:url'] + '/google/callback';
     var google = createOauth2Client(callbackUrl);
 
     var redirectUrl = google.generateAuthUrl({
@@ -32,7 +32,7 @@ module.exports = function(app) {
   };
 
   lib.handleCallback = function(req, callback) {
-    var callbackUrl = req.baseUrl + '/google/callback';
+    var callbackUrl = config.crowi['app:url'] + '/google/callback';
     var google = createOauth2Client(callbackUrl);
     var code = req.session.googleAuthCode || null;
 
@@ -45,7 +45,7 @@ module.exports = function(app) {
         return callback(new Error('[googleAuth.handleCallback] Error to get token.'), null);
       }
 
-      googleapis.discover('oauth2', 'v1').withOpts({cache: { path: __dirname + '/../tmp/googlecache'}}).execute(function(err, client) {
+      googleapis.discover('oauth2', 'v1').withOpts({cache: { path: __dirname + '/../../tmp/googlecache'}}).execute(function(err, client) {
         if (err) {
           return callback(new Error('[googleAuth.handleCallback] Failed to discover oauth2 API endpoint.'), null);
         }

+ 0 - 1
lib/util/middlewares.js

@@ -118,7 +118,6 @@ exports.applicationNotInstalled = function() {
 exports.applicationInstalled = function() {
   return function(req, res, next) {
     var config = req.config;
-    console.log(config);
 
     if (Object.keys(config.crowi).length === 1) { // app:url is set by process
       return res.redirect('/installer');