Closed defvol closed 10 years ago
WIP, falta:
@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?
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);
});
});
});
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()
.
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();
});
});
});
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
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();
});
});
});
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
cómo configuraron passport?
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('/');
});
});
});
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
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
Por el tamaño del PR, el reCAPTCHA entra en otro PR.
Lo puede validar alguien? cc: @urkonn @diegobeauroyre
funciona correctamente :+1:
y el window.location.reload()
en client se está ejecutando?
Soluciona #31 y #32