mxabierto / debate

(sin mantenimiento) Debate público sobre la Política Nacional de Datos Abiertos en México. Powered by DemocracyOS.
http://politica.datos.gob.mx
1 stars 0 forks source link

Entrance redesign #38

Closed defvol closed 10 years ago

defvol commented 10 years ago

Soluciona #31 y #32

defvol commented 10 years ago

WIP, falta:

defvol commented 10 years ago

@gvilarino @cristiandouce llevo rato tratando de automatizar el login cuando hay un registro exitoso. Estoy tratando con un emit("submit") al prototype de la forma de sign-in.

¿cómo creen que se pueda hacer esto sin tanto spaghetti?

defvol commented 10 years ago

La consola no tira nada de info. Esto es lo que estoy buscando:

+}
diff --git a/lib/signup/signup.js b/lib/signup/signup.js
index 4599db4..b49e90d 100644
--- a/lib/signup/signup.js
+++ b/lib/signup/signup.js
@@ -4,6 +4,7 @@

 var page = require('page');
 var SignupForm = require('./signup-form-view');
+var SigninForm = require('../signin/view');
 var EmailValidationForm = require('./email-validation-form-view');
 var ResendValidationEmailForm = require('./resend-validation-email-form-view');
 var empty = require('empty');
@@ -40,7 +41,8 @@ page('/signup', function(ctx, next) {
         return form.errors([err || res.body.error]);
       };
       title(t('Signup complete'));
-      form.showSuccess();
+      var signinForm = SigninForm({});
+      signinForm.emit('submit', data);
     });
   });
 });
cristiandouce commented 10 years ago

primero, no hace falta que requieras ../signin/...

Simplemente agrega al component.json de signup la dependencia local signin y podrías hacer lo mismo así:


var SigninForm = require('signin/view`);
// ...

var form = new SigninForm({});
form.emit('submit', data);

Debería andar bien.

Te tira algún error? o funciona bien de la forma que acabas de expresar?

La segunda forma de hacerlo es alterar el controller del signup POST. En esta línea: https://github.com/mexico-abierto/app/blob/development/lib/signup/index.js#L43

Agregando previo a ello lo mismo que aparece en signin:

https://github.com/mexico-abierto/app/blob/development/lib/signin/index.js#L41

Básicamente, con la instancia de citizen, llamar al helper .login en request... y devolver 200 OK después de eso.

En el client, van a tener que ejecutar un window.location.reload().

defvol commented 10 years ago

ahorita estoy probando la 2da opción:

diff --git a/lib/signup/index.js b/lib/signup/index.js
index 33c9571..b034e49 100644
--- a/lib/signup/index.js
+++ b/lib/signup/index.js
@@ -7,6 +7,9 @@ var express = require('express')
   , path = require('path')
   , t = require('t-component')
   , signup = require('./lib/signup')
+  , mongoose = require('mongoose')
+  , Citizen = mongoose.model('Citizen')
+  , auth = Citizen.authenticate()
   ;

 /**
@@ -40,7 +43,14 @@ app.post('/', function(req, res, next) {
     if (err) {
       return res.json(200, { error: t(err.message) });
     };
-    return res.json(200);
+
+    // Login with new account
+    auth(req.body.email, req.body.password, function (err, citizen, info) {
+      req.login(citizen, function(err) {
+        if (err) return res.json(200, { error: 'crap' });
+        return res.json(200);
+      });
+    });
   })
 });

diff --git a/lib/signup/signup.js b/lib/signup/signup.js
index 4599db4..618c30d 100644
--- a/lib/signup/signup.js
+++ b/lib/signup/signup.js
@@ -39,8 +39,6 @@ page('/signup', function(ctx, next) {
       if (err || (res.body && res.body.error)) {
         return form.errors([err || res.body.error]);
       };
-      title(t('Signup complete'));
-      form.showSuccess();
     });
   });
 });
defvol commented 10 years ago

La consola no dice nada se queda en

  democracyos:root Application started on port 3000 +0ms
  democracyos:signup new citizen [53040548218f05322b75e611] from Local signup [d@d.com] +0ms
  democracyos:signup Saved citizen [53040548218f05322b75e611] +1s
defvol commented 10 years ago

probé también

diff --git a/lib/signup/index.js b/lib/signup/index.js
index 33c9571..146d43f 100644
--- a/lib/signup/index.js
+++ b/lib/signup/index.js
@@ -7,6 +7,9 @@ var express = require('express')
   , path = require('path')
   , t = require('t-component')
   , signup = require('./lib/signup')
+  , mongoose = require('mongoose')
+  , Citizen = mongoose.model('Citizen')
+  , auth = Citizen.authenticate()
   ;

 /**
@@ -40,7 +43,11 @@ app.post('/', function(req, res, next) {
     if (err) {
       return res.json(200, { error: t(err.message) });
     };
-    return res.json(200);
+    // Login with new account
+    req.login(citizen, function(err) {
+      if (err) return res.json(200, { error: 'crap' });
+      return res.json(200);
+    });
   })
 });

diff --git a/lib/signup/signup.js b/lib/signup/signup.js
index 4599db4..618c30d 100644
--- a/lib/signup/signup.js
+++ b/lib/signup/signup.js
@@ -39,8 +39,6 @@ page('/signup', function(ctx, next) {
       if (err || (res.body && res.body.error)) {
         return form.errors([err || res.body.error]);
       };
-      title(t('Signup complete'));
-      form.showSuccess();
     });
   });
 });
defvol commented 10 years ago

Nunca veo el:

  democracyos:utils Checking for logged in citizen +10s
  democracyos:utils Citizen logged in, moving on... +0ms
  democracyos:citizen Request /citizen/me +0ms
defvol commented 10 years ago

cómo configuraron passport?

defvol commented 10 years ago

No entiendo qué puede estar fallando, la implementación ya es similar a la de '/signup/validate/:token'

diff --git a/lib/signup/index.js b/lib/signup/index.js
index 33c9571..9a95689 100644
--- a/lib/signup/index.js
+++ b/lib/signup/index.js
@@ -40,7 +40,12 @@ app.post('/', function(req, res, next) {
     if (err) {
       return res.json(200, { error: t(err.message) });
     };
-    return res.json(200);
+
+    // Login with new account
+    req.login(citizen, function(err) {
+      if (err) return res.json(200, { error: t(err.message) });
+      return res.json(200);
+    });
   })
 });

diff --git a/lib/signup/signup.js b/lib/signup/signup.js
index 4599db4..b1567ba 100644
--- a/lib/signup/signup.js
+++ b/lib/signup/signup.js
@@ -39,8 +39,7 @@ page('/signup', function(ctx, next) {
       if (err || (res.body && res.body.error)) {
         return form.errors([err || res.body.error]);
       };
-      title(t('Signup complete'));
-      form.showSuccess();
+      window.location.replace('/');
     });
   });
 });
defvol commented 10 years ago

Está raro esto, si falla el signup se imprime scheisse, justo como esperaríamos del código, pero si hago signup no se imprime nada en consola:

  signup.doSignUp(req.body, meta, function (err, citizen) {
    var log = require('debug')('democracyos:signup');

    if (err) {
      log('scheisse');
      return res.json(200, { error: t(err.message) });
    };

    log('attempting login');

    // Login with new account
    req.login(citizen, function(err) {
      if (err) return res.json(200, { error: t(err.message) });
      log('we did it!');
      return res.json(200);
    });
  })
  democracyos:signup new citizen [530410f0458fecd72df9e5dd] from Local signup [f@f.com] +0ms
  democracyos:signup scheisse +7ms
  democracyos:signup new citizen [530410f8458fecd72df9e5de] from Local signup [g@g.com] +8s
  democracyos:signup Saved citizen [530410f8458fecd72df9e5de] +1s
defvol commented 10 years ago

aaaaaarghhhhh

al borrar el envío de correos me quedé sin el callback!

https://github.com/mexico-abierto/app/blob/development/lib/signup/lib/signup.js#L51

defvol commented 10 years ago

Resuelto por https://github.com/mexico-abierto/app/commit/703d08f1bb1520cef87cf4894083a1c1e74961ef

defvol commented 10 years ago

Por el tamaño del PR, el reCAPTCHA entra en otro PR.

defvol commented 10 years ago

Lo puede validar alguien? cc: @urkonn @diegobeauroyre

urkonn commented 10 years ago

funciona correctamente :+1:

cristiandouce commented 10 years ago

y el window.location.reload() en client se está ejecutando?